返回列表列表元素的列表

时间:2015-02-15 20:59:27

标签: python

我有一个清单:

word_list = ['dog', 'downvote', 'gestapo']

我想这样:

['d', 'o', 'g', 'w', 'n', 'v', 't', 'e', 's', 'a', 'p']

这是我的代码;

[list(word_list[j]) for j in range(len(word_list))]

此代码返回:

[['d', 'o', 'g'], ['d', 'o', 'w', 'n', 'v', 'o', 't', 'e'], ['g', 'e', 's', 't', 'a', 'p', 'o']]

相反,我尝试了这个:

[(word_list[j])[k] for j in range(len(word_list)) for k in len(word_list[j])]

这会返回错误:'int' object is not iterable

我想纠正并更新我的最终尝试,以便获得所需的输出。

5 个答案:

答案 0 :(得分:2)

如果您想保留原始字符顺序(如word_list中的字样):

def f(seq):
    seen = set()
    for x in (x for word in word_list for x in word):
        if x not in seen:
            seen.add(x)
            yield x 

list(f(word_list)) # ['d', 'o', 'g', 'w', 'n', 'v', 't', 'e', 's', 'a', 'p']

如果不这样做,只需使用set comprehension构建set

{x for word in word_list for x in word} # {'e', 'd', 'n', 'a', 't', 'w', 'o', 'g', 'v', 's', 'p'}       

答案 1 :(得分:1)

虽然我认为你在技术上都是正确的。 在python中执行此操作的正确方法可能是:

from itertools import chain
set(chain(*word_list))

答案 2 :(得分:0)

k=[]
for j in [list(i) for i in word_list]:
    k += j
print list(set(k))
>>>>['d', 'o', 'g', 'w', 'n', 'v', 't', 'e', 's', 'a', 'p']

答案 3 :(得分:0)

您可以将reduceoperator.addset一起使用。

>>> import operator

>>> words = ['dog', 'downvote', 'gestapo']

>>> set(reduce(operator.add, words))
set(['a', 'e', 'd', 'g', 'o', 'n', 'p', 's', 't', 'w', 'v'])

如果您希望它成为一个列表:

>>> list(set(reduce(operator.add, words)))
['a', 'e', 'd', 'g', 'o', 'n', 'p', 's', 't', 'w', 'v']

注意:这不是按字母顺序排列的。

答案 4 :(得分:0)

如果订单很重要,一个简单的方法是使用(滥用?)一个OrderedDict

>>> word_list = ['dog', 'downvote', 'gestapo']
>>> from collections import OrderedDict
>>> from itertools import chain
>>> OrderedDict.fromkeys(chain.from_iterable(word_list)).keys()
['d', 'o', 'g', 'w', 'n', 'v', 't', 'e', 's', 'a', 'p']