簡體   English   中英

過濾存儲在列表中的列表

[英]Filter lists that are stored in a list

我有一些要過濾的列表。 考慮以下示例:

a = [1,2]
b = [2,3]

l = [a,b]

for i in l:
  i = [elem for elem in l if elem != 2]

我希望輸出為a==[1]b==[3] ,但看起來i的更新不會改變元素ab 在 C++ 中,我會使用指針,但我似乎無法在 Python 中找到相應的概念。

通過在for循環中為i分配一個新列表,它會丟失對ab的引用,因此它們不會被更新。 相反,您應該就地更新i 您還應該遍歷i而不是l來過濾每個子列表:

for i in l:
    i[:] = (elem for elem in i if elem != 2)

演示: https ://replit.com/@blhsing/BlissfulWhichGravity

您確定您不只是想要以下內容嗎?

a = [1, 2]
b = [2, 3]

l = [[i for i in a if i != 2], [i for i in b if i != 2]]

或者更靈活:

exclude = (2,)

a = [1, 2]
b = [2, 3]

l = [a, b]
l = [[i for i in x if not any(i == e for e in exclude)] for x in l]

后一種方法使得每個都向l添加額外的子列表,並指定更多的數字從它們中排除。

嘗試這個:

a = [1,2]
b = [2,3]

l = [a,b]

for i in l:
    i.remove(2)
  
print(a)
print(b)
print(l)

如果您不止一次出現2 ,您可以嘗試:

for i in l:
    try:
        while True:
            i.remove(2)
    except ValueError:
        pass
  

輸出:

[1]
[3]
[[1], [3]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM