2014-01-13 72 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