我正在嘗試從串列中洗掉值(“c”)的所有實體。
letters = ["a", "b", "c", "c", "d"]
for i in letters:
if i == "c":
letters.remove(i)
print(letters)
輸出是 ["a", "b", "c", "d"] 而不是預期的 ["a", "b", "d"]
為什么只洗掉一個“c”,而不是全部/全部?
uj5u.com熱心網友回復:
當您必須過濾串列的內容時,過濾器是正確的方法。
list(filter(lambda x: x!='c', letters))
['a', 'b', 'd']
uj5u.com熱心網友回復:
您正在更新串列并同時對其進行迭代。當您洗掉第一個時,c您的新串列將是["a", "b", "c", "d"],但索引仍位于第 3 位(第一個位置c),因此它直接移動到第 4 位。
如果您將串列更改為["a", "b", "c", "d", "c"]您將看不到問題。
我建議您創建一個全新的串列:
letters = ["a", "b", "c", "c", "d"]
new_letters = [i for i in letters if i != "c"]
print(new_letters)
uj5u.com熱心網友回復:
我建議不要在串列元素的回圈內洗掉/添加元素。相信創建一個新串列并將所有相關元素復制到新串列中會更好。
uj5u.com熱心網友回復:
查找duplictaes然后filter
letters = ["a", "b", "c", "c", "d"]
duplicates = []
for i in letters:
count = letters.count(i)
if count > 1 and i not in duplicates:
duplicates.append(i)
#Filter
print([x for x in letters if x not in duplicates])
輸出#
['a', 'b', 'd']
uj5u.com熱心網友回復:
這是一個帶有 for 回圈的(誠然丑陋但有效的)實作:
letters = ["a", "b", "c", "c", "d"]
for i in range(len(letters)-1, -1, -1):
if letters[i] == "c":
del(letters[i])
print(letters)
解釋:倒數解決Aymen提到的索引問題
uj5u.com熱心網友回復:
您可以使用洗掉重復項collections.Counter,
In [1]: from collections import Counter
In [2]: [k for k, v in Counter(letters).items() if v == 1]
Out[2]: ['a', 'b', 'd']
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/518400.html
標籤:Python列表
上一篇:串列理解以獲得第二個和第四個元素
下一篇:如何從2個字典中創建串列串列
