python:将列表的每个元素组合到元组列表

标签 python list combinations

<分区>

我有一个数字列表:

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/

相关文章:

python - 无效请求错误 : VARCHAR requires a length on dialect mysql

python - 比较一个元素是否存在于两个列表中

java8 - 从对象内部的属性分组

haskell - 在 Haskell 中生成列表的唯一组合的函数

c# - 将多个枚举合并到主枚举列表中

Python正则表达式忽略日期模式

Python外部合并排序运行缓慢

python - 使用 strip 函数删除通过正则表达式获得的字符串的一部分

mysql - iOS 上开发人员提供的用户更新列表的方法

python - 如何有效地生成所有可能的坐标对而不在numpy中重复