首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从列表中从上一个数字中移除小于目标值的值

如何从列表中从上一个数字中移除小于目标值的值
EN

Stack Overflow用户
提问于 2016-05-30 23:09:09
回答 3查看 5K关注 0票数 1

给定一个排序的增加数字列表,我试图创建一个新列表,它只保留至少比前一个数字大3的值。我尝试过一些条件语句,但没有得到正确的格式。例如,从

代码语言:javascript
复制
a = [3,4,8,12,14,16]

我们会得到

代码语言:javascript
复制
new_a = [3,8,12,16]

只有14人会因为与12的距离小于3而辍学,而保持16位是因为12比3更大,还有4人会辍学。任何帮助都将不胜感激!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-30 23:30:49

这应该可以做到:

代码语言:javascript
复制
new_a = a[:1]
for i in a[1:]:
    if i >= new_a[-1] + 3:
        new_a.append(i)
票数 5
EN

Stack Overflow用户

发布于 2016-05-30 23:17:49

代码语言:javascript
复制
a = [3,4,8,12,14,16]
b = a[:1]
last_num = b[0]
for num in a:
    if last_num is not None and last_num + 3 <= num:
        b.append(num)
        last_num = num

print(b)
票数 0
EN

Stack Overflow用户

发布于 2016-05-31 00:49:31

可能过高了,但是如果您最后做了大量的计算(以及向列表中添加新的数字),您可以尝试子类化list

代码语言:javascript
复制
class Newlist(list):
    def __init__(self, *args):
        super(Newlist, self).__init__(*args)
        if len(self) > 0:
            i = 1
            while i<len(self):
                if self.__getitem__(i) < 3+self.__getitem__(i-1):
                    self.remove(self.__getitem__(i))
                i += 1

    def append(self, item):
        if len(self) == 0:
            super(Newlist, self).append(item)
        elif item >= self.__getitem__(-1) + 3:
            super(Newlist, self).append(item)
        else: return

因此,您可以用

代码语言:javascript
复制
a = Newlist([3, 4, 8, 12, 14, 16])

它将自动缩短为[3, 8, 12, 16]

此外,append被过度使用,只允许遵循您的规则的新值。示例:a.append(20)将把20添加到a的末尾,但a.append(17)什么也不做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37534655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档