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