我试图遍历列表并将一些元素保存到新列表中:那些比前一个值大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 :(得分: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中的代码:
其次,控制台输出:
答案 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]