2014-01-13 70 views
0

工作我使用的是一種通過二維列表循環,以循環和消除一切,但只有一組重複的獲取刪除的刪除():爲什麼不蟒蛇

>>> one = [['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'], 
    ['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'], 
    ['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11'], 
    ['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'], 
    ['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'], 
    ['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11']] 
>>> for i in one: 
     one.remove(i) 
>>> one 
[['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'], 
['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'], 
['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11']] 

誰叫remove()只刪除一組重複項?我應該做一些不同的事情,因爲有重複?

+1

你想刪除重複或一切? – thefourtheye

+1

如果你想刪除所有'one = []'就夠了。 – aIKid

回答

2

你的問題提到了重複,這意味着你的問題對你實際尋找的東西有點模糊。我想你的意思是刪除列表中的所有元素,因爲它們是重複的。 (如果真的,真的意味着從一個全新的空列表開始,請參閱@ÓscarLópez的答案。)

如果您只是想刪除重複項,請考慮以下事項。在遍歷它時,您正在更改列表,這意味着您將無法刪除列表中的所有元素。試試這個:

>>> one = [['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'], 
['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'], 
['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11'], 
['red', 'rfg', 'erg', '234', '23423434234', 'F', '2014-01-11'], 
['red', 'gertus', 'gengie', '234', '234234234234', 'F', '2014-01-11'], 
['red', 'sdf', 'sdf', '23', '234234234234', 'F', '2014-01-11']] 
>>> [i for i in one if one.count(i) < 2] 
[] 

看它是這樣的:

t = [1, 2, 3, 4] 
for i in t: 
    t.remove(i) 

[1, 2, 3, 4] 
^ 
remove t[0], now t == [2, 3, 4] 

[2, 3, 4] 
    ^
remove t[1], now t == [2, 4] 

There is no t[2], so we are done. 

[i for i in one if one.count(i) < 2]list comprehension。列表理解創建一個新列表,而不是原地修改第一個列表。本質上,爲了您的目的,這意味着您不必擔心在嘗試修改它時更改列表的形狀。

+0

對不起,但我是python新手。爲什麼在for循環開始之前首先使用[]? – Pythonist

+1

@Pythonist查看上面列表推導的鏈接。 –

+0

謝謝!那個鏈接很棒,總是有更多新事物要學習。 – Pythonist

2

這個怎麼樣?

one = [] 

這是很多簡單...

+0

...但不一樣。 'one.clear()'可能就是你所追求的。 – Veky