我很好奇您是否可以从列表列表中删除重复项并以列表形式返回唯一性。我正在尝试这个:
def do_list( lists ):
res = [ [ one for one in temp if one not in res ] for temp in lists ]
return res
因此,例如,如果:
lists = [ [ "a","b","c" ],[ "d","a" ],[ "c","a","f" ] ]
结果应该是:
[ "a","b,"c","d","f" ]
但是这给了我一个错误,那就是我在分配之前先引用了变量res。
因为您在res
理解内引用,所以会出现错误。这是行不通的,因为res
仅在表达式完成后才可用。
因为我很好奇,并且标题要求“通过使用列表理解从列表列表中删除重复项”,所以我想看看是否可以仅使用列表理解来做到这一点,而不是通过使用:p来作弊itertools
方法如下:
>>> lists = [ [ "a","b","c" ],[ "d","a" ],[ "c","a","f" ] ]
>>> lists2 = sorted(sum(lists, []))
>>> [ item for i, item in enumerate(lists2) if i == 0 or i == len(lists2) or lists2[i - 1] != item ]
['a', 'b', 'c', 'd', 'f']
要获得更多的疯狂,可以将它们合并在一行上,但是您必须重复sum()
andsorted()
调用。我无法动弹自己写这样难看的代码;-)
sum(lists, [])
将使列表变平;它返回+
中所有项目的总和(运算符)lists
,并[]
作为初始列表。sorted()
将其排序。这是必需的,因为我们仅检查最后一项if
语句检查前一项是否与当前项相同。但这是丑陋且不符合Python风格的。为了爱Guido,请使用Pythonista的答案(或其中的一些变化)!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句