将字符串列表展平为字符,然后重新删除新列表

时间:2013-10-28 20:45:04

标签: python

我有以下内容,并通过this documentation

将列表展平
>>> 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']

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

3 个答案:

答案 0 :(得分:4)

最简单的方法是使用集合理解而不是列表comp:

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

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

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

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))

答案 1 :(得分:3)

集合是从迭代中获取唯一元素的简单方法。为了展平列表列表,itertools.chain提供了一种方便的方法。

from itertools import chain

>>> set(chain.from_iterable(['cat','dog','rabbit'])
{'a', 'b', 'c', 'd', 'g', 'i', 'o', 'r', 't'}

答案 2 :(得分: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)