删除低于和高于特定值的列表元素[重复]

问题描述 投票:0回答:2

我有下面的代码,一个列表中有两个列表,我想删除每个列表中高于和低于某些值的元素。我尝试的方法不起作用,因为它只删除了一些值,我不明白为什么。

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)
python list for-loop element
2个回答
0
投票

您不应该在迭代期间修改列表,因为它将无法找到所有元素。更好的方法是使用列表推导式创建新列表。 因此,在上面的情况下,您只需要复制与条件匹配的元素:

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

0
投票

使用列表理解创建一个新的过滤列表,仅包含您想要保留的元素。

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)

您面临的问题是在迭代列表时修改列表。

© www.soinside.com 2019 - 2024. All rights reserved.