我有下面的代码,一个列表中有两个列表,我想删除每个列表中高于和低于某些值的元素。我尝试的方法不起作用,因为它只删除了一些值,我不明白为什么。
liste = [[1,2,3,4], [3,4,5,6,7,8,9]]
for a in liste:
print(a)
for b in liste[liste.index(a)]:
print(b)
if b < 3:
print(f"{b} < 3")
liste[liste.index(a)].remove(b)
for c in liste[liste.index(a)]:
print(c)
if c > 6:
print(f"{c} > 6")
liste[liste.index(a)].remove(c)
print(liste)
您不应该在迭代期间修改列表,因为它将无法找到所有元素。更好的方法是使用列表推导式创建新列表。 因此,在上面的情况下,您只需要复制与条件匹配的元素:
listd = [] # create a new list
listx = [n for n in liste[0] if n > 2] # capture all items greater than 2
listd.append(listx) # add this to listd
listy = [n for n in liste[1] if n < 7] # capture all items less than 7
listd.append(listy) # add this to listd
print(listd) # display the new list
使用列表理解创建一个新的过滤列表,仅包含您想要保留的元素。
liste = [[1, 2, 3, 4], [3, 4, 5, 6, 7, 8, 9]]
# Use list comprehension to filter the sublists
# Keep elements in the first list that are < 3
liste[0] = [b for b in liste[0] if b < 3]
# Keep elements in the second list that are > 6
liste[1] = [c for c in liste[1] if c > 6]
print(liste)
您面临的问题是在迭代列表时修改列表。