1. ホーム
  2. python

[解決済み] 2つの弦をインターリーブさせる最もピトニックな方法

2022-05-13 20:38:32

質問

2つの文字列を結合する最もパイソン的な方法は何でしょうか?

例えば

入力します。

u = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
l = 'abcdefghijklmnopqrstuvwxyz'

出力します。

'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'

どのように解決するのですか?

私にとっては、最も Pythonic* な方法は次のようなものです。 はほとんど同じことをします しかし + 演算子を使って各文字列を連結しています。

res = "".join(i + j for i, j in zip(u, l))
print(res)
# 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'

また、2つの join() の呼び出しを2回行うよりも高速です。

In [5]: l1 = 'A' * 1000000; l2 = 'a' * 1000000

In [6]: %timeit "".join("".join(item) for item in zip(l1, l2))
1 loops, best of 3: 442 ms per loop

In [7]: %timeit "".join(i + j for i, j in zip(l1, l2))
1 loops, best of 3: 360 ms per loop

より高速なアプローチは存在しますが、それらはしばしばコードを難解にします。

注意してください。 もし二つの入力文字列が ではない である場合、長い方が切り捨てられ zip は短い方の文字列の末尾で反復処理を停止します。この場合、代わりに zip を使うべきでしょう。 zip_longest ( izip_longest を Python 2 の場合) から itertools モジュールから、両方の文字列が完全に使い果たされることを確認します。


*引用元 Python の禅 : 読みやすさのカウント .

ピソニック = 読みやすさ 私の場合 i + j の方が視覚的に解析されやすいのです、少なくとも私の目には。