我正在尝试打印列表中所有单词中的所有字母,没有重复。
wordlist = ['cat','dog','rabbit']
letterlist = []
[[letterlist.append(x) for x in y] for y in wordlist]
上面的代码会生成['c', 'a', 't', 'd', 'o', 'g', 'r', 'a', 'b', 'b', 'i', 't']
,而我正在寻找['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i']
。
如何修改列表推导以删除重复项?
答案 0 :(得分:10)
你关心维持秩序吗?
>>> wordlist = ['cat','dog','rabbit']
>>> set(''.join(wordlist))
{'o', 'i', 'g', 'd', 'c', 'b', 'a', 't', 'r'}
答案 1 :(得分:4)
两种方法:
保留订单:
>>> from itertools import chain
>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(chain.from_iterable(wordlist)))
['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i']
如果您对订单不感兴趣:
>>> list(set().union(*wordlist))
['a', 'c', 'b', 'd', 'g', 'i', 'o', 'r', 't']
这两种方法都没有使用list-comps作为副作用,例如:
[[letterlist.append(x) for x in y] for y in wordlist]
正在构建Nones
列表的列表,纯粹是为了变异letterlist
答案 2 :(得分:3)
虽然所有其他答案都没有维持秩序,但这段代码确实如此:
from collections import OrderedDict
letterlist = list(OrderedDict.fromkeys(letterlist))
另见一篇关于基准测试的几种方法的文章:Fastest way to uniqify a list in Python。
答案 3 :(得分:2)
如果您想编辑自己的代码:
[[letterlist.append(x) for x in y if x not in letterlist] for y in wordlist]
或
list(set([[letterlist.append(x) for x in y if x not in letterlist] for y in wordlist]))
否则:
list(set(''.join(wordlist)))
答案 4 :(得分:0)
您可以使用set
删除重复项,但不会维护订单。
>>> letterlist = list({x for y in wordlist for x in y})
>>> letterlist
['a', 'c', 'b', 'd', 'g', 'i', 'o', 'r', 't']
>>>
答案 5 :(得分:0)
wordlist = ['cat','dog','rabbit']
s = set()
[[s.add(x) for x in y] for y in wordlist]