a = [[' 0 ', '*X*', '*Y*', '*Z*'], [' 0 ', '*X*', '*Y*', '*Z*'], [' 0 ', '*X*', '*Y*', '*Z*']]
for i in a:
for j in i:
if '*' in j:
i.remove(j)
for i in range(len(a)):
for j in range(len(a[i])):
if '*' in a[i][j]:
del a[i][j]
我尝试删除列表中包含star的项目,但第一个循环会让我超出范围错误,而第二个循环仍然会 y 不删除,我该如何修复问题?非常感谢你
答案 0 :(得分:4)
你在迭代它时改变了数组。不要那样做。 而是使用列表推导(为Pythonic):
a = [
[' 0 ', '*X*', '*Y*', '*Z*'],
[' 0 ', '*X*', '*Y*', '*Z*'],
[' 0 ', '*X*', '*Y*', '*Z*'],
]
a = [[e for e in l if '*' not in e] for l in a]
# >>> a
# [[' 0 '], [' 0 '], [' 0 ']]
如果由于某种原因你仍然需要改变a
(即保持它引用相同的列表对象),你可以a[:] = ...
而不是a = ...
。
答案 1 :(得分:0)
迭代同一个列表并更改其值,为您解决问题。
for i in a[:]:
# ^ Help to iterate over a copy of a
for j in i[:]:
# ^ Help to iterate over a copy of i
if '*' in j:
i.remove(j)
答案 2 :(得分:0)
列表理解可以返回您要查找的结果:
a = [[i] for j in a for i in j if '*' not in i]
print(a)
这是你的输出:
[[' 0 '], [' 0 '], [' 0 ']]
我们基本上运行for循环。所以我们列表中的[i]理解是我们将添加到列表中的值。该值将是您自己的代码中的嵌套列表。这就是为什么我们在它周围放置括号。因为你知道的只是a中的每个嵌套列表。然后我们进行条件测试' if' *'不在i中,如果占位符不在那里,它会将值添加到列表中。这应该可以解决您的问题,并大大简化您的代码。