我想从列表中删除大于阈值的元素。
例如,一个包含元素的列表a = [1,9,2,10,3,6]。
我想删除所有大于 5 的元素。
回报应该是 [1,2,3]。
我尝试使用 enumerate 和 pop 但它不起作用。
for i,x in enumerate(a):
if x > 5:
a.pop(i)
Run Code Online (Sandbox Code Playgroud)
Ray*_*ger 12
尝试使用列表理解:
>>> a = [1,9,2,10,3,6]
>>> [x for x in a if x <= 5]
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
这表示,“创建一个新的x值列表,其中x来自a但仅当x小于或等于阈值5 时。
与这个问题枚举()和POP()方法是在遍历它,它发生变异的名单-有点类似于锯断树枝,而你仍然坐在肢体。所以当(i, x)is 时(1, 9),pop(i)将a更改为[1,2,10,3,6],但随后迭代进行到(2, 10)意味着值2永远不会被检查。它从那里分崩离析。
FWIW,如果您需要就地可变列表,只需用切片重新分配它:
a[:] = [x for x in a if x <= 5]
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :-)
小智 5
您还可以将该filter()函数与一个lambda函数一起使用,这对于元组而不仅仅是列表的内容可以更好地工作。
a = [1, 9, 2, 10, 3, 6]
filtered = filter(lambda num: num > 5, a)
print(list(filtered))
Run Code Online (Sandbox Code Playgroud)
输出:[9, 10, 6]
a = [
['Data1', 1],
['Data2', 9],
['Data3', 2],
]
filtered = filter(lambda num: num[1] > 5, a)
print(list(filtered))
Run Code Online (Sandbox Code Playgroud)
输出:[['Data2', 9]]
| 归档时间: |
|
| 查看次数: |
13313 次 |
| 最近记录: |