将两个字符串网格化的最Python方式是什么?
例如:
输入:
u = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' l = 'abcdefghijklmnopqrstuvwxyz'
输出:
'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
对我来说,最pythonic *的方式是以下代码,它 几乎做同样的事情, 但是使用+运算符来连接每个字符串中的各个字符:
+
res = "".join(i + j for i, j in zip(u, l)) print(res) # 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
它也比使用两个join()调用更快:
join()
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来确保两个字符串都已用尽。
zip
zip_longest
izip_longest
itertools
引用 Python之禅 : 可读性很重要 。 Pythonic =对我而言 可读性* ;i + j至少对于我的眼睛来说,更容易从视觉上进行解析。
i + j