所以我有以下代碼n = int(input())arr = map(int, input().split())numList = list(arr)topNum = max(numList)for i in numList: if i == topNum: del numList[numList.index(i)]print(numList)它需要以下輸入52 3 6 6 5這個(gè)想法是刪除所有出現(xiàn)的頂部數(shù)字,但我有一個(gè)錯(cuò)誤,它只刪除頂部數(shù)字一次。我已經(jīng)檢查過(guò)是否打印該數(shù)字,如果它等于頂部數(shù)字,并且在測(cè)試時(shí)打印了兩次,所以我知道它與 if 語(yǔ)句和 for 循環(huán)無(wú)關(guān),所以它一定與我的方式有關(guān)刪除它?如果是這樣,為什么盡管處于 for 循環(huán)中,它只刪除一次。我知道它的意思是只刪除第一次出現(xiàn)的情況,但這就是為什么我有 for 循環(huán)。
1 回答

郎朗坤
TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
您不應(yīng)該修改正在迭代的列表。
這是一種使用函數(shù)式編程方法來(lái)實(shí)現(xiàn)您正在尋找的目標(biāo)的方法。與您的方法相同,您將輸入映射到整數(shù),然后我們使用過(guò)濾器忽略輸入中等于 n 的任何數(shù)字。
n = int(input())
numbers = list(filter(lambda x: x != n, map(int, input().split())))
print(numbers)
添加回答
舉報(bào)
0/150
提交
取消