我有一个字符串列表
['a','b','c','d','x','y','z','k']
我想要给定列表中所有字符串的唯一字符列表。
对于ll,输出应为
{{1}}
有一种干净的方法吗?
答案 0 :(得分:9)
您想要生成字母的集:
{l for word in ll for l in word}
您始终可以将其转换回列表:
list({l for word in ll for l in word})
演示:
>>> ll = ['abc', 'abd', 'xyz', 'xzk']
>>> {l for word in ll for l in word}
{'b', 'a', 'x', 'k', 'd', 'c', 'z', 'y'}
您还可以使用itertools.chain.from_iterable()
为所有字符提供单个迭代器:
from itertools import chain
set(chain.from_iterable(ll))
如果您必须有一个反映第一次出现的字符顺序的列表,您可以使用collections.OrderedDict()
object而不是集合,然后使用list()
提取密钥:
from collections import OrderedDict
from itertools import chain
list(OrderedDict.fromkeys(chain.from_iterable(ll)))
演示:
>>> from collections import OrderedDict
>>> list(OrderedDict.fromkeys(chain.from_iterable(ll)))
['a', 'b', 'c', 'd', 'x', 'y', 'z', 'k']
答案 1 :(得分:3)
我不知道最简单的方法,但我知道一种方式:
list = ['abc', 'abd', 'xyz', 'xzk']
new=set()
for word in list:
for letter in word:
new.add(letter)
print(new)
对于初学者来说,这是一种简单的方法,因为它不需要任何您可能不知道如何使用的模块。
答案 2 :(得分:2)
这是一种保留订单的低效方式。当字符总数很小时就可以了,否则,你应该使用Martijn的OrderedDict
方法。
ll = ['abc', 'abd', 'xyz', 'xzk']
s = ''.join(ll)
print(sorted(set(s), key=s.index))
<强>输出强>
['a', 'b', 'c', 'd', 'x', 'y', 'z', 'k']
这是保留订单的另一种方法,该订单不像以前的方法那样紧凑,但效率更高。
ll = ['abc', 'abd', 'xyz', 'xzk']
d = {c: i for i, c in enumerate(reversed(''.join(ll)))}
print(sorted(d, reverse=True, key=d.get))
<强>输出强>
['a', 'b', 'c', 'd', 'x', 'y', 'z', 'k']
使用s.index
作为关键函数是低效的,因为它必须对它排序的每个字符对s
字符串执行线性扫描,而我的d
字典可以获取索引O(1)中的每个角色。我使用reversed
迭代器,因为我们希望先前的字符覆盖同一个字符串的后续重复项,并且使用reversed
比使用[::-1]
构建新字符串更有效。
创建d
dict只比创建set(s)
稍慢,并且它可能比使用OrderedDict
快一点,它肯定使用更少的RAM。
答案 3 :(得分:0)
考虑使用set()
s = set()
for word in ll:
for letter in word:
s.add(letter)
现在s
应该包含所有独特的字母。您可以使用s
将list(s)
转换为列表。
答案 4 :(得分:0)
您可以使用itertools
:
import itertools
ll = ['abc', 'abd', 'xyz', 'xzk']
set(itertools.chain(*[list(x) for x in ll]))
{'a', 'b', 'c', 'd', 'k', 'x', 'y', 'z'}
答案 5 :(得分:0)
这是一个你可以调用并给它列表的函数,它将返回所有独特的字母,我将它添加到最后打印
lst = ['abc', 'abd', 'xyz', 'xzk']
def uniqueLetters(lst1):
unique = set()
for word in lst1:
for letter in word:
unique.add(letter)
return unique
print(uniqueLetters(lst))
要使用唯一变量获取变量,请调用函数,如下所示:
uniqueLetters123 = uniqueLetters(lst)
您可以将lst替换为您的列表名称。
答案 6 :(得分:0)
l2 =list()
for i in ll:
for j in i:
l2.append(j)
[''.join(i) for i in set(l2)]
输出:
'a', 'c', 'b', 'd', 'k', 'y', 'x', 'z'
答案 7 :(得分:0)
只是另一个......
>>> set().union(*ll)
{'d', 'a', 'y', 'k', 'c', 'x', 'b', 'z'}
如果需要,请将list(...)
包裹起来,不过为什么会这样。