這個問題在這里已經有了答案: 如何在迭代時從串列中洗掉專案? (25 個回答) 4 小時前關閉。
data = [1, 2, 3, 4, 5]
for x in data:
print(x)
if data.count(x) < 2:
data.remove(x)
大家好,
所以我目前正在通過 py.checkio.org 作業,并且我必須洗掉串列中所有唯一的數字。
當我在沒有 if 陳述句的情況下運行我的代碼時,我得到一個從 1 到 5 計數的輸出。 但是一旦我使用 if 陳述句運行 for 回圈,for 回圈只運行每第二個數字的資料,我的輸出是 1 3 5。誰能告訴我這里發生了什么?
uj5u.com熱心網友回復:
雖然來自@Stef 和@0x5453 都與您的問題有關。@ConnorTJ 的評論顯然是錯誤的。remove 函式不會洗掉索引處的專案,而是洗掉第一次出現的專案。
要回答你的問題,關于這里發生了什么,讓 [s 檢查你的代碼:第一次通過 x 的值是 1 你列印 x 的值然后測驗看看 x 的出現次數是否小于 2由于答案是肯定的,您繼續從串列中洗掉該專案。
第二次遍歷串列 For 回圈選擇串列中的下一個值(在索引 1 處),它現在是值 3 您列印值 3 您檢查 3 的計數是否小于 2 因為計數是減去您從串列中洗掉該專案。
這個程序比繼續
uj5u.com熱心網友回復:
簡單的解決方案,使用filter()
從那些函式回傳 true 的 iterable 元素構造一個迭代器
它回傳函式回傳 true 的串列項的串列。
例子:
x = [1,1,2,2,3,4]
x = filter(lambda f: (x.count(f)<2), x)
x = list(x)
print(x)
或簡而言之: print(list(filter(lambda f: (x.count(f)>=2),x)))
輸出是 [1,1,2,2]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/340113.html
標籤:蟒蛇-3.x
下一篇:如何在串列之外合并字典中的鍵?
