循环遍历列表并将满足条件的元素保存到新列表

时间:2017-06-29 17:08:44

标签: python

我试图遍历列表并将一些元素保存到新列表中:那些比前一个值大50以上的元素。我当前的代码只保存第一个值。我想要[0, 76, 176, 262, 349]

list = [0, 76, 91, 99, 176, 192, 262, 290, 349]
new_list = []
for i in list:
    if ((i+1)-i) > 50:
        new_list.extend([i])

5 个答案:

答案 0 :(得分:6)

解决方案

  

我想要的是保存值0,76,176,262和349。

所以听起来你想迭代列表,如果当前元素大于其前一个元素50 ,则将其保存到列表中并重复。 此解决方案假定原始列表已排序。让我们将其转换为某些代码。

lst = [0, 76, 91, 99, 176, 192, 262, 290, 349]
new_lst = []
for i, num in enumerate(lst):
    if i == 0 or num - lst[i-1] > 50:
        new_lst.append(num)

print(new_lst)
# [0, 76, 176, 262, 349]

这里有趣的部分是循环中的条件:

if i == 0 or num - lst[i-1] > 50:

第一部分考虑我们是否在第一个元素,在这种情况下,我假设您想要添加元素,无论如何。否则,获取当前元素与原始列表中 previous 元素之间的差异,并检查差异是否大于50.在这两种情况下,我们都要将元素追加到列表中(因此)。

备注

  • 您应该避免使用list作为变量,这样就不会影响内置的Python类型。
  • lst.extend([num])最好写成lst.append(num)
  • enumerate(lst)允许您轻松获取列表中每个元素的索引和值(或任何可迭代的)。

答案 1 :(得分:3)

语句if ((i+1)-i) > 50将始终评估为if (1 > 50),这是错误的。您正在寻找list中的下一个元素,但i只是当前元素的。尝试使用tee()库中的itertools函数来获取多个值,或类似

list = [0, 76, 91, 99, 176, 192, 262, 290, 349]
new_list = []
for i in range(len(list)):
    print (i, list[i])
    if i == 0 or (list[i] - list[i-1]) > 50:
        new_list.append(list[i])

请注意,我没有添加任何关于是否 i + 1元素的检查,因此您可能需要进行一些错误处理。

修改

这是我的最终编辑。我要感谢@Prune执行标准:)

首先,PyCharm中的代码:

Code in PyCharm CE

其次,控制台输出:

Console output

答案 2 :(得分:0)

15.01

当然,代码可以做得更好。但这应该有用。

答案 3 :(得分:0)

您可以在列表理解中添加条件。 此外, not 为变量提供与内置类型相同的名称(列表)。

my_list = [0, 76, 91, 99, 176, 192, 262, 290, 349]

# Start with the first element;
#   then grab each element more than 50 greater than the previous one.

new_list = [my_list[0]]
new_list.extend([my_list[i] for i in range(1, len(my_list))
                 if my_list[i] - my_list[i-1] > 50])
print(new_list)

输出:

[0, 76, 176, 262, 349]

答案 4 :(得分:0)

我的解决方案

l = [0, 76, 91, 99, 176, 192, 262, 290, 349]
o = list(l[0]) + [a for a, b in zip(l[1:], l[:-1]) if a - b - 50 > 0]

输出:[0, 76, 176, 262, 349]