python - 实现十进制 zip 的更多 pythonic 方式

标签 python performance python-3.x

<分区>

给定两个数字ab,十进制zip的定义如下:

• C 的第一个(即最重要的)数字是a 的第一个数字;

• C的第二位是b的第一位;

• C的第三位是a的第二位;

• C的第四位是b的第二位;

• 等

如果整数 ab 中的一个用完了数字,则剩余的数字 另一个整数附加到结果。

例子:

输入: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 的方法来实现相同的目的?

上面代码的问题是:

  • 我正在尝试附加 ab 的剩余数字,但在某些情况下,其中一个或它们或两者都不是不必要的。
  • 输入量过大时需要一定的时间。

最佳答案

你可以使用 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=''))))

关于python - 实现十进制 zip 的更多 pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44683539/

相关文章:

Python 全局关键字与 Pylint W0603

python - 将 python 脚本输出打印到文本文件和命令窗口

javascript - 更高效的 Javascript

python-3.x - 如何将数组列表划分为子数组?

python - 如何通过传递 **args 来更新函数变量

python - 使用 Python 在 POST 请求中从 PIL Image 发送多个 StringIO

python - Pandas - 拆分大型 excel 文件

algorithm - 如何计算非标准日常算法的复杂度

mysql - 是否可以更有效地获得 count(*) 和 * ?

python-3.x - PyQt5 弹出窗口