【问题标题】:How to turn a tuple into an integer in Python (examples inside)?如何在 Python 中将一个元组变成一个整数(里面的例子)?
【发布时间】:2013-02-12 22:31:37
【问题描述】:

我有一个元组列表:

"(1,2,3), (2,3,1)..."

我想把它改成整数列表:

“123, 231...”

我该怎么做呢?提前致谢。

【问题讨论】:

  • 等等。元组中的那些元素是数字吗?

标签: python integer tuples


【解决方案1】:

更实用的方法:

[reduce(lambda a, x: a * 10 + x, t) for t in tuples]

编辑:

只是为了好玩,对 JBernardo 的回答做一个小基准:

In [21]: %timeit [int(''.join(str(i) for i in t)) for t in tuples]
100000 loops, best of 3: 7.54 us per loop

In [22]: %timeit [reduce(lambda a, x: a * 10 + x, t) for t in tuples]
1000000 loops, best of 3: 1.55 us per loop

编辑 2:

Akavall 指出我原来的答案只有在元组只有个位数整数时才有效。

如果这对您的用例来说是不可接受的,JBernardo 的回答可能是一种更简单的方法。但只是为了好玩:

[reduce(lambda a, x: a * 10**(len(str(x))) + x, t) for t in tuples]

或者根本没有任何字符串转换:

from math import log10
[reduce(lambda a, x: a * 10**(int(log10(x))+1) + x, t) for t in tuples]

【讨论】:

  • 执行速度快了 6 微秒,但是当你几个月后再次使用 reduce() 时,它需要十秒钟才能弄清楚它是如何工作的。
  • 很公平。你也可以说它的执行速度提高了 5 倍。很抱歉您发现 reduce() 令人困惑;我个人觉得这比做所有的演员更简单。
  • 只有当元组由个位数整数组成时,您的解决方案才有效。如果tuples = ((1,29,3), (2,3,1)) 怎么办?
【解决方案2】:

怎么样:

[int(''.join(str(i) for i in t)) for t in tuples]

【讨论】:

  • 非常感谢,这太完美了。
【解决方案3】:

比@Luke 的简单

[sum(x * 10**i for i, x in enumerate(t[1][::-1])) for t in tuples]

总和就像 x1 + x2 * 10^2 + ... + xN * 10^n

[::-1] - 反转元组,枚举得到 (xN, N) 对。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 2021-08-02
    • 2011-03-31
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多