【问题标题】:Append list every Nth index from another list从另一个列表中每隔 N 个索引附加列表
【发布时间】:2021-03-20 07:28:09
【问题描述】:

我有两个列表:

gizmos = [('gizmo1', 314),
          ('gizmo1', 18),
          ('gizmo1', 72),
          ('gizmo1', 2),
          ('gizmo1', 252)]

owner =  ['owner1','owner3','owner32']

我的目标结果是将两个列表组合成一个新列表,循环每个其他元素:

newlist= [('owner1','gizmo1', 314),
          ('gizmo1', 18),
          ('owner3','gizmo1', 72),
          ('gizmo1', 2),
          ('owner32','gizmo1', 252)]

我尝试zip 3 个列表,但由于长度不匹配,这不起作用。

【问题讨论】:

标签: python list


【解决方案1】:

你可以通过列表理解来做到这一点:

gizmos = [('gizmo1', 314), ('gizmo1', 18), ('gizmo1', 72), ('gizmo1', 2), ('gizmo1', 252)]

owner =  ['owner1','owner3','owner32']

newlist = [(owner[i//2], *giz ) if i%2==0 else giz for i, giz in enumerate(gizmos)]
print(newlist)
# [('owner1', 'gizmo1', 314), ('gizmo1', 18), ('owner3', 'gizmo1', 72), ('gizmo1', 2), ('owner32', 'gizmo1', 252)]

对于奇数索引,我们只取gizmos 中的项目。

对于偶数索引,我们创建一个包含所有者的新元组,以及我们解包的原始 Gizmo 元组的项目。

【讨论】:

    【解决方案2】:

    如果可以修改列表而不是创建新列表:

    for i, o in enumerate(owner):
        gizmos[2*i] = o, *gizmos[2*i]
    

    或者:

    gizmos[::2] = ((o, *g) for o, g in zip(owner, gizmos[::2]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多