我知道在Python列表解析中使用副作用不是好的做法。但我不明白爲什麼像發生以下情況:爲什麼奇怪的列表理解行爲與副作用?
In [66]: tmp = [1,2,3,4,5]; [tmp.remove(elem) for elem in tmp]
Out[66]: [None, None, None]
In [67]: tmp
Out[67]: [2, 4]
不管這是很好的做法,不應列表解析內部做一些預測的?如果上述是是可預測的,有人可以解釋爲什麼只有三個remove
操作發生,爲什麼偶數條目仍然存在?
http://stackoverflow.com/questions/2442651/how-to-delete-an-element-from-a -list-while-iterating-it-in-python?rq = 1 –
@JoshLee我不需要刪除元素,本身,我只是想明白爲什麼'None或...'的東西不是加工。事實證明,它正在工作,我沒有意識到索引正在改變。 – ely
另外,在這個例子中,我將'None'放在哪個部分實際上是一個昂貴的計算,可能會導致返回'None',在這種情況下,從'tmp'刪除項目* may * be對我來說是一個可行的選擇。但無論如何,在列表理解結束時加入一個「if」子句也不好,因爲它需要再次評估這個昂貴的函數才能知道要保留什麼。 – ely