2016-04-21 77 views
0

以下是我到底要:如何刪除Python中由列表讀入的當前元素?

A = [1,2,3] 

for a in A: 
    if a > 1: 
     del a 

print(A) 

我想列出爲[1],但它仍然是[1,2,3]。

所以我真正的目標是刪除我現在得到的當前元素。

我知道有一種 '德爾' 喜歡這一個用法:

A = [1,2,3] 

for i, a in enumerate(A): 
    if a > 1: 
     del A[i] 

print(A) 

,並列出將是[1,3],但不是[1]。

因爲當我使用

del a[1] #2 

的名單A orginally 3,將需要使用索引1從一個列表,而不是使用2所以我不能成功地刪除它得到它。

如何刪除列表中的當前元素?

回答

3
B = filter(lambda x: x <= 1, A) 

然後B是所有元素小於或等於A 1。

+0

謝謝!這確實是我想要的,但我更想知道如何刪除當前讀取的元素。 –

+0

@MarsLee:查看我的答案。 –

+1

實際上,在迭代過程中,您無法修改列表的元素。您可以保存要刪除的元素或元素的索引,然後在迭代完成後刪除它們。或者,嘗試通過索引而不是元素迭代列表。 @PriyanshGoel – liushuaikobe

0
>>> [i for i in [1,2,3] if i<=1] 
[1] 
>>> list(filter(lambda x:x<=1, [1,2,3])) 
[1] 
>>> 

所有列表元素是>1被過濾掉

6

它幾乎從來沒有一個好主意,改變一個集合你超過迭代。在很多情況下,更好的方法是隻在新列表中選擇所需的這些元素。

一個pythonesque方式做到這一點是使用列表理解:

a = [1,2,3] 
    b = [x for x in a if x <= 1] 

    print (b) 

'[ .. for ... if ..]'是各種列表操作的像mapfilter一個非常漂亮的語法。

請注意,我補充了您的過濾器謂詞,因爲我選擇了必須保留的內容,而不是必須刪除的內容。

希望這有助於!

0

在你的代碼,當你試圖刪除

del a 

你居然試圖刪除一個臨時變量的值,其值是一樣的A [X]的值。所以A中的值仍然不受影響。如果要刪除A的值,可以使用

del A[X] 
a.remove(value) 

這些方法將從列表中刪除/刪除值。

1

通常,如果您正在迭代其元素,則在修改數據結構時必須非常小心。如果您在迭代列表元素的同時嘗試從列表中刪除元素,Python會給您一個錯誤。如果您確實想要修改列表,請使用不同的迭代策略,例如

A = [1, 2, 3, 1, 2, 3] 
n = len(A) 
i = 0 
while i < n: 
    if A[i] > 1: 
     del A[i] 
     n -= 1 
    else: 
     i += 1 
print(A) 

這是獲得所需結果的一種方法。