我有一个字符串列表
ll = ['abc', 'abd', 'xyz', 'xzk']
Run Code Online (Sandbox Code Playgroud)
我想要一个给定列表中所有字符串的唯一字符列表.
对于ll,输出应该是
['a','b','c','d','x','y','z','k']
Run Code Online (Sandbox Code Playgroud)
有一个干净的方法来做到这一点?
你想要产生一组字母:
{l for word in ll for l in word}
Run Code Online (Sandbox Code Playgroud)
您始终可以将其转换回列表:
list({l for word in ll for l in word})
Run Code Online (Sandbox Code Playgroud)
演示:
>>> ll = ['abc', 'abd', 'xyz', 'xzk']
>>> {l for word in ll for l in word}
{'b', 'a', 'x', 'k', 'd', 'c', 'z', 'y'}
Run Code Online (Sandbox Code Playgroud)
您还可以使用itertools.chain.from_iterable()为所有字符提供单个迭代器:
from itertools import chain
set(chain.from_iterable(ll))
Run Code Online (Sandbox Code Playgroud)
如果必须有一个反映第一次出现的字符顺序的列表,则可以使用collections.OrderedDict()对象而不是集合,然后使用以下内容解压缩密钥list():
from collections import OrderedDict
from itertools import chain
list(OrderedDict.fromkeys(chain.from_iterable(ll)))
Run Code Online (Sandbox Code Playgroud)
演示:
>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(chain.from_iterable(ll)))
['a', 'b', 'c', 'd', 'x', 'y', 'z', 'k']
Run Code Online (Sandbox Code Playgroud)
小智 5
我不知道最简单的方法来做到这一点,但我知道一种方法:
list = ['abc', 'abd', 'xyz', 'xzk']
new=set()
for word in list:
for letter in word:
new.add(letter)
print(new)
Run Code Online (Sandbox Code Playgroud)
对于初学者来说,这是一种简单的方法,因为它不需要任何您可能还不知道如何使用的模块。