我有一些语法:
l_one = [ x for x in someList ] # list with duplicates
l = []
l_two = [ l.append( y ) for y in l_one if y not in l ] # duplicates removed
l 和 l_two 都是没有重复的相同列表。有没有办法减少线路,也许有一个班轮?
编辑:更正 - l_two 是“非”列表。
实际上,它们并不相同。.append()
返回None
是因为它修改了列表,所以l_two
是带有一堆None
s 的列表。但是,l
将是没有欺骗的列表。
如果要从列表中删除重复项,可以将其设置为集合:
l_two = list(set(l_one))
请注意,这将删除订单。
如果您想使用不可散列的类型,请尝试使用 for 循环而不是列表推导:
l_one = [x for x in someList]
l_two = []
for i in l_one:
if i not in l_two:
l_two.append(i)
或者:
from itertools import groupby
l_two = [key for key, value in groupby(l_one)]
如果我理解正确,您从一个名为的列表开始,该列表someList
可能有重复项,并且您希望最终得到相同的列表但删除了重复项?
您可以从删除第一行代码开始,它只是将 someList 复制到一个名为 l_one 的新(但相同)列表中:
>>> someList = [ 3,1,4,1,5,9,2,7 ]
>>> l = []
>>> [ l.append(y) for y in someList if y not in l]
[None, None, None, None, None, None, None]
>>> print l
[3, 1, 4, 5, 9, 2, 7]
>>>
即使 someList 的元素本身就是列表,这仍然有效:
>>> l = []
>>> someList = [[1,2],[2,1],[1,2],[3,4]]
>>> l = []
>>> [ l.append(y) for y in someList if y not in l]
[None, None, None]
>>> print l
[[1, 2], [2, 1], [3, 4]]
>>>