给定一个排序的增加数字列表,我试图创建一个新列表,它只保留至少比前一个数字大3的值。我尝试过一些条件语句,但没有得到正确的格式。例如,从
a = [3,4,8,12,14,16]我们会得到
new_a = [3,8,12,16]只有14人会因为与12的距离小于3而辍学,而保持16位是因为12比3更大,还有4人会辍学。任何帮助都将不胜感激!
发布于 2016-05-30 23:30:49
这应该可以做到:
new_a = a[:1]
for i in a[1:]:
if i >= new_a[-1] + 3:
new_a.append(i)发布于 2016-05-30 23:17:49
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)发布于 2016-05-31 00:49:31
可能过高了,但是如果您最后做了大量的计算(以及向列表中添加新的数字),您可以尝试子类化list。
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因此,您可以用
a = Newlist([3, 4, 8, 12, 14, 16])它将自动缩短为[3, 8, 12, 16]
此外,append被过度使用,只允许遵循您的规则的新值。示例:a.append(20)将把20添加到a的末尾,但a.append(17)什么也不做。
https://stackoverflow.com/questions/37534655
复制相似问题