我想要一個函數,它接受一個列表並返回該列表,其中任何小於0或大於「upper」的元素都將被刪除。確保python列表的值範圍
我想出如何與列表理解這樣做,但我不明白,爲什麼這並不工作:
dim = 4
def ensure_values(l, upper=dim**2):
for i in l:
if i < 0 or i >= upper:
l.remove(i)
return l
l = [0,2,-3,5]
ensure_values(l)
[0,2,-3,5]
我預期[0,2,5]。
當您修改它時列表正在改變,導致迭代跳過值。在這種情況下,列表理解更好,但如果需要,可以創建要刪除的值列表,然後再刪除這些值。 – swstephe
它確實有效。開始一個新的會話,複製粘貼你的代碼,它的工作原理。另外@swstephe說:例如使用一個副本'l2 = l [:]',並從l2中刪除,並返回l2。 – fredtantini
只要列表中只有一個超出範圍的值,它就會生效。 – kojiro