次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
+リスト化を使用して、私が考えることができる最も簡単な方法です。
>>> 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)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加