0

我有以下内容,并通过此文档展平了列表

>>> wordlist = ['cat','dog','rabbit']
>>> letterlist = [lt for wd in wordlist for lt in wd]
>>> print(letterlist)
['c', 'a', 't', 'd', 'o', 'g', 'r', 'a', 'b', 'b', 'i', 't']

可以扩展列表理解以删除重复字符。期望的结果如下(以任何顺序):

['a', 'c', 'b', 'd', 'g', 'i', 'o', 'r', 't']

我可以转换为一个集合,然后再转换回一个列表,但我更愿意将其保留为一个列表。

4

3 回答 3

4

最简单的是使用集合推导而不是列表组合:

letterlist = {lt for wd in wordlist for lt in wd}

我所做的只是用花括号替换方括号。这适用于 Python 2.7 及更高版本。

对于 Python 2.6 和更早版本,您可以使用set()带有生成器表达式的可调用对象:

letterlist = set(lt for wd in wordlist for lt in wd)

最后但并非最不重要的一点是,您可以通过将字符串链接在一起来生成所有序列中的字母来完全替换理解语法,将它们全部视为一个长序列,使用itertools.chain.from_iterable(); 你给它一个序列序列,它会给你一个长序列:

from itertools import chain
letterlist = set(chain.from_iterable(wordlist))
于 2013-10-28T20:49:01.187 回答
3

集合是一种从可迭代对象中获取独特元素的简单方法。要展平列表列表,itertools.chain提供了一种方便的方法。

from itertools import chain

>>> set(chain.from_iterable(['cat','dog','rabbit'])
{'a', 'b', 'c', 'd', 'g', 'i', 'o', 'r', 't'}
于 2013-10-28T20:48:31.290 回答
2

我认为应该使用集合理解

wordlist = ['cat','dog','rabbit']
letterlist = {lt for wd in wordlist for lt in wd}
print(letterlist)

这仅适用于 python 2.7 及更高版本,用于以前的版本set,而不是{}

wordlist = ['cat','dog','rabbit']
letterlist = set(lt for wd in wordlist for lt in wd)
print(letterlist)
于 2013-10-28T20:47:12.497 回答