4

我正在尝试打印列表中所有单词中的所有字母,没有重复。

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']

如何修改列表推导以删除重复项?

4

6 回答 6

10

你关心维护秩序吗?

>>> wordlist = ['cat','dog','rabbit']
>>> set(''.join(wordlist))
{'o', 'i', 'g', 'd', 'c', 'b', 'a', 't', 'r'}
于 2013-07-21T16:28:23.087 回答
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

于 2013-07-21T16:59:06.907 回答
3

虽然所有其他答案都没有保持顺序,但此代码可以:

from collections import OrderedDict
letterlist = list(OrderedDict.fromkeys(letterlist))

另请参阅有关使用基准测试的几种方法的文章:Fastest way to uniqify a list in Python

于 2013-07-21T16:31:47.763 回答
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)))
于 2013-07-21T16:27:59.990 回答
0

您可以使用set删除重复项,但不维护顺序。

>>> letterlist = list({x for y in wordlist for x in y})
>>> letterlist
['a', 'c', 'b', 'd', 'g', 'i', 'o', 'r', 't']
>>> 
于 2013-07-21T16:27:37.927 回答
0
wordlist = ['cat','dog','rabbit']
s = set()
[[s.add(x) for x in y] for y in wordlist]
于 2013-07-21T16:28:15.603 回答