给定两个数字a
和b
,十进制zip的定义如下所述:
•C的第一个(即最重要的)数字是a
的第一个数字;
•C的第二个数字是b
;
•C的第三个数字是a
;
•C的第四个数字是b
的第二个数字;
•等。
如果其中一个整数a
和b
用完了数字,则其余数字为
另一个整数被附加到结果中。
示例:
输入: a = 12,b = 59 输出应为: c = 1529
输入: a = 1094,b = 12 输出: c = 110294
我有这段代码:
a = 1234534543
b = 3525523342
a = str(a)
b = str(b)
aLen = len(a)
bLen = len(b)
c = "".join([x+y for (x,y) in zip(a,b)]) + a[min(aLen,bLen):] + b[min(aLen,bLen):]
print(int(c))
它有效,但有更多的pythonic方法来实现同样的目标吗?
以上代码的问题是:
a
和b
的其余数字,但在某些情况下,其中一个或两个都不是必需的。答案 0 :(得分:4)
您可以使用itertools.zip_longest
:
from itertools import zip_longest
c = "".join([x+y for (x,y) in zip_longest(str(a), str(b), fillvalue='')])
如果您不喜欢x+y
,还有itertools.chain
会使可迭代变得扁平化:
from itertools import chain
c = "".join(chain.from_iterable(zip_longest(a,b, fillvalue='')))
您也可以将其包含在int
内,以便在一行中完成所有操作:
c = int("".join(chain.from_iterable(zip_longest(a,b, fillvalue=''))))
答案 1 :(得分:4)
是的,您可以使用以下oneliner:
from itertools import zip_longest
c = ''.join([x+y for x,y in zip_longest(str(a),str(b),fillvalue='')])
代码的工作原理如下:我们使用zip_longest
将两个字符串压缩在一起,并且我们使用fillvalue
来防止其中一个迭代用尽。然后对于每两个“数字”(或者在字符串耗尽的情况下为空字符串),我们将它们连接在一起,然后我们将zip的所有组合连接在一起以获得结果。