我使用for循环遍历2D列表并删除所有内容,但只删除了一组重复项:
>>> 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()只删除一组重复项?我应该做些不同的事情因为有重复吗?
答案 0 :(得分: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。列表推导创建新列表而不是就地修改第一个列表。从本质上讲,就您的目的而言,这意味着您在尝试修改形状时无需担心列表更改形状。
答案 1 :(得分:2)
这是怎么回事?
one = []
这简单得多......