双拉链:
[*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()