繁体   English   中英

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

[英]Looping over a list and saving elements that meet a condition to a new list

我正在尝试遍历列表,并将一些元素保存到新列表中:那些比先前值大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])

我想要保存值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:

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

笔记

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

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

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中的代码:

PyCharm CE中的代码

二,控制台输出:

控制台输出

for i in range(len(list)-1):
    if (list[i+1]-list[i]) > 50:
        new_list.append(list[i])
if list[-1] - new_list[-1] > 50:
    new_list.append(list[-1]) #for the last element of list

当然,可以使代码更好。 但这应该可行。

您可以将条件放入列表推导中。 另外, 不要给一个变量相同的名称(列表)为内置型。

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]

我的解决方案

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM