<分区>
我有一个数字列表:
list_A = [1,2,3,4,5]
我有另一个元组列表:
list_B = [(10, 11), (20,21), (30,31), (40,41), (50,51)]
我想合并list_A和list_B,变成如下:
[(10,11,1), (20,21,2), (30,31,3), (40,41,4), (50,51,5)]
这样做最有效的方法是什么?
<分区>
我有一个数字列表:
list_A = [1,2,3,4,5]
我有另一个元组列表:
list_B = [(10, 11), (20,21), (30,31), (40,41), (50,51)]
我想合并list_A和list_B,变成如下:
[(10,11,1), (20,21,2), (30,31,3), (40,41,4), (50,51,5)]
这样做最有效的方法是什么?
最佳答案
双 zipper :
[*zip(*zip(*list_B), list_A)]
目前解决方案的比较:
1035 ns 1047 ns 1049 ns [(*b, a) for a, b in zip(list_A, list_B)]
1138 ns 1140 ns 1141 ns [(list_B[index][0], list_B[index][1], list_A[index]) for index in range(len(list_A))]
963 ns 967 ns 993 ns [list_B[i] + (list_A[i],) for i in range(len(list_A))]
805 ns 820 ns 826 ns [i + (j,) for j,i in zip(list_A,list_B)]
947 ns 952 ns 965 ns [*zip(*zip(*list_B), list_A)]
基准代码(Try it online!):
from timeit import repeat
list_A = [1, 2, 3, 4, 5]
list_B = [(10, 11), (20, 21), (30, 31), (40, 41), (50, 51)]
E = [
'[(*b, a) for a, b in zip(list_A, list_B)]',
'[(list_B[index][0], list_B[index][1], list_A[index]) for index in range(len(list_A))]',
'[list_B[i] + (list_A[i],) for i in range(len(list_A))]',
'[i + (j,) for j,i in zip(list_A,list_B)]',
'[*zip(*zip(*list_B), list_A)]',
]
for _ in range(3):
for e in E:
number = 100000
times = sorted(repeat(e, globals=globals(), number=number, repeat=3))
print(*('%4d ns ' % (t / number * 1e9) for t in times), e)
print()
关于python:将列表的每个元素组合到元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69114973/