我在python中有一个列表,每当元素满足特定条件时,我都会删除该元素。问题在于for循环似乎正在跳过某些元素。我认为这是因为删除后列表已移至左侧。那么如何正确删除列表中的项目呢?这是我的代码
list = [0, 0, 0, 1, 1, 0 ,0, 1, 0]
for elem in list:
if elem == 0:
list.remove(elem)
print(list)
Run Code Online (Sandbox Code Playgroud)
这就是结果 [1, 1, 0, 1, 0]
在迭代列表时,您不应删除元素或向列表中添加元素。这里有一些选择。
方法1: 创建一个新的筛选列表。
[x for x in my_list if x != 0]
Run Code Online (Sandbox Code Playgroud)
方法2: 如果项目为布尔值,则可以使用filter。
list(filter(lambda x: x, my_list)) # or lambda x: x != 0 depending on intent.
Run Code Online (Sandbox Code Playgroud)
方法3: 创建要删除的项目的索引,然后再将其删除。
idx = [n for n, x in enumerate(my_list) if x == 0]
for i in reversed(idx):
my_list.pop(i)
Run Code Online (Sandbox Code Playgroud)
方法4: 根据Alex Martelli在相关问题中的解决方案
my_list[:] = [x for x in my_list if x != 0]
Run Code Online (Sandbox Code Playgroud)
这将分配给与my_list变量名称匹配的列表切片,从而保留对该变量的任何现有引用。
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |