我有一个列表,其中字符串的长度为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
循环?
我的印象是可能没有,但是我很好奇在哪里知道是否还有其他更有效的内置方法来完成此任务。预先感谢。
答案 0 :(得分:5)
通过str.join
+列表化,这是我想到的最简单的方法。
>>> 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)
答案 1 :(得分:3)
使用列表理解:
>>> [letter for word in a for letter in word]
['a', 'a', 'q', 't', 'h', 'w', 'z']