我有一个清单:
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
我想纠正并更新我的最终尝试,以便获得所需的输出。
答案 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)
您可以将reduce
与operator.add
和set
一起使用。
>>> 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']