Python:唯一字符列表的字符串列表

Anu*_*pta -3 python

我有一个字符串列表

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)

有一个干净的方法来做到这一点?

Mar*_*ers 9

你想要产生一字母:

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

对于初学者来说,这是一种简单的方法,因为它不需要任何您可能还不知道如何使用的模块。