我有一个列表,其中包含长度为 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)
关于python - 单词和字母列表到字母列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53782516/