Skip to main content
 首页 » 编程设计

python之单词和字母列表到字母列表

2025年05月04日9傻小

我有一个列表,其中包含长度为 1 到 n 的字符串:

a = ['a','aq','thw','z'] 

我试图获得一个只有长度 1 元素的平面列表,扩展那些长度大于 1 的元素。我目前的解决方案是:

l = [] 
for i in a: 
    l = l + list(i) 
print(l) 
['a', 'a', 'q', 't', 'h', 'w', 'z'] 

是否有更直接的方法来避免 for 循环?

我的印象是可能没有,但是我很好奇在哪里知道是否有其他更有效的内置方法来完成此操作。提前致谢。

请您参考如下方法:

这是我能想到的最简单的方法,使用 str.join + listification。

>>> list(''.join(a)) 
['a', 'a', 'q', 't', 'h', 'w', 'z'] 

还有chain的解决方案:

>>> from itertools import chain 
>>> list(chain.from_iterable(a)) # Thanks, @Patrick Haugh! 
['a', 'a', 'q', 't', 'h', 'w', 'z'] 

它们都非常快。

a2 = a * 100000 
%timeit list(''.join(a2)) 
%timeit list(chain.from_iterable(a2)) 
%timeit [letter for word in a2 for letter in word] 
 
11.1 ms ± 247 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) 
32.3 ms ± 863 µs per loop (mean ± std. dev. of 7 runs, 10 loops each) 
50.2 ms ± 1.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)