Skip to main content
 首页 » 编程设计

python之将列表中的元组转换为 int

2025年05月04日12kuangbin

如何将其中包含元组的列表转换成以下形式

list = [(1, 9, 7), (1, 5, 6), (1, 7), (1, 4), (7, 4), (7,)] 

进入一个包含整数的列表,比如,

list = [197, 156, 17, 14, 74, 7] 

以最有效的方式?我试过递归,但对于大型列表(数千个元组)来说,它的内存太贵了。

请您参考如下方法:

你可以使用 functools.reduce用于转换每个元组:

>>> from functools import reduce 
>>> l = [(1, 9, 7), (1, 5, 6), (1, 7), (1, 4), (7, 4), (7,)] 
>>> [reduce(lambda x,y: x*10+y, t) for t in l] 
[197, 156, 17, 14, 74, 7] 

更新 由于问题是在询问有效的方法,因此这里是建议答案的衡量标准:

import itertools as it 
import functools 
 
def conv_reduce(l): 
    return [functools.reduce(lambda x,y: x*10+y, t) for t in l] 
 
def conv_str(l): 
    return [int("".join(map(str, item))) for item in l] 
 
def conv_pow(l): 
    return [sum(n*10**e for n, e in zip(reversed(item), it.count())) for item in l] 
 
def conv_pow2(l): 
    return [sum(t[-i-1]*(10**i) for i in range(len(t))) for t in l] 
 
if __name__ == '__main__': 
    import timeit 
    print('reduce', timeit.timeit("conv_reduce(l)", setup="from __main__ import conv_reduce; l = [(1, 9, 7), (1, 5, 6), (1, 7), (1, 4), (7, 4), (7,)]")) 
    print('str', timeit.timeit("conv_str(l)", setup="from __main__ import conv_str; l = [(1, 9, 7), (1, 5, 6), (1, 7), (1, 4), (7, 4), (7,)]")) 
    print('pow', timeit.timeit("conv_pow(l)", setup="from __main__ import conv_pow; l = [(1, 9, 7), (1, 5, 6), (1, 7), (1, 4), (7, 4), (7,)]")) 
    print('pow2', timeit.timeit("conv_pow2(l)", setup="from __main__ import conv_pow2; l = [(1, 9, 7), (1, 5, 6), (1, 7), (1, 4), (7, 4), (7,)]")) 

输出:

reduce 2.5965667460041004 
str 5.068828338997264 
pow 7.192991987001733 
pow2 8.017168823003885