【问题标题】:Add elements of a list at the end of each tuple of a list of tuples在元组列表的每个元组末尾添加列表元素
【发布时间】:2023-03-21 02:29:01
【问题描述】:

我有一个包含一些静态元素的列表:

['foo', 1, '', 0]

我有一个元组列表:

[('val1', 9), ('val2', 'val3'), ('val4', '')]

如何在元组列表的每个元组末尾添加列表的元素?

输出

[
('val1', 9, 'foo', 1, '', 0),
('val2', 'val3', 'foo', 1, '', 0),
('val4', '', 'foo', 1, '', 0)
]

【问题讨论】:

  • 请注意,元组不能用新元素扩展。您对新元组列表满意吗?

标签: python list tuples


【解决方案1】:

只需使用添加元组来重建元组列表:

elts = ['foo', 1, '', 0]
t = [('val1', 9), ('val2', 'val3'), ('val4', '')]

result = [e+tuple(elts) for e in t]

结果:

[('val1', 9, 'foo', 1, '', 0),
 ('val2', 'val3', 'foo', 1, '', 0),
 ('val4', '', 'foo', 1, '', 0)]

您可能希望将elts 设置为tuple 以避免循环中的转换:

elts = ['foo', 1, '', 0] # or elts = tuple(elts) if you have an existing list
result = [e+elts for e in t]

【讨论】:

  • 如果我在列表理解中转换为元组,或者我之前更改过它,它会改变什么?比如性能之类的。
  • 元组使用的内存比列表少,因为它们不可调整大小。不在原地工作意味着制作现有数据的副本,并创建一个新元组。除非你使用循环和列表(而不是理解)
【解决方案2】:

在 python 中,元组是不可变的集合,这意味着您不能修改其中的元素。但是,您可以将变量重新分配给一个新元组,它可以像列表一样使用。

list1 = ['foo', 1, '', 0]
list2 = [('val1', 9), ('val2', 'val3'), ('val4', '')]
endlist = []
for x in range(len(list2)):
    endlist += [tuple(list2[x]) + tuple(list1)]

【讨论】:

    【解决方案3】:

    您可以为此使用元组解包:

    elts = ['foo', 1, '', 0]
    t = [('val1', 9), ('val2', 'val3'), ('val4', '')]
    
    result = [(*t_item, *elts) for t_item in t]
    

    它给出了:

    [('val1', 9, 'foo', 1, '', 0),
     ('val2', 'val3', 'foo', 1, '', 0),
     ('val4', '', 'foo', 1, '', 0)]
    

    它比https://stackoverflow.com/a/54409510/8056572 快一点,列表很大t

    elts = ['foo', 1, '', 0]
    t = [('val1', 9), ('val2', 'val3'), ('val4', '')] * 1000
    
    %timeit [(*t_item, *elts) for t_item in t]
    307 µs ± 2.45 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    %timeit [e + tuple(elts) for e in t]
    432 µs ± 10.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-21
      • 2018-02-25
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多