【问题标题】:Tuple from multiple values in a list来自列表中多个值的元组
【发布时间】:2021-08-27 11:27:01
【问题描述】:

如何从第一个元素与对应列表中的每个值创建多个元组?

期望的结果:[(0,727), (0,1), (0,766), (0,950)... ]

谢谢

【问题讨论】:

    标签: python list tuples


    【解决方案1】:

    嵌套推导可以工作:

    data = [(0, [727, 1, ...]), (1, [...]), ...]
    
    tpls = [(x, y) for x, lst in data for y in lst]
    

    【讨论】:

      【解决方案2】:

      您可以使用 itertools.product 在两个可迭代对象之间创建成对的非重复组合。

      from itertools import product
      
      s_value = [[727, 1, 766], [989, 1067, 895], [21, 22, 23]]
      c_keys = range(0, 3)
      
      for c_key, s_val in zip(c_keys, s_value):
          print(list(product([c_key], s_val)))
           
      >> [(0, 727), (0, 1), (0, 766)]
      >> [(1, 989), (1, 1067), (1, 895)]
      >> [(2, 21), (2, 22), (2, 23)]
      

      如果你想创建一个包含所有组合元组的大列表。你可以添加more-itertoolsflatten函数

      from more_itertools import flatten
      from itertools import product
      
      combs = [list(product([c_key], s_val)) for c_key, s_val in zip(c_keys, s_value)]
      print(combs)
      >> [[(0, 727), (0, 1), (0, 766)], [(1, 989), (1, 1067), (1, 895)], [(2, 21), (2, 22), (2, 23)]]
      
      all_combs = list(flatten(combs))
      print(all_combs)
      >> [(0, 727), (0, 1), (0, 766), (1, 989), (1, 1067), (1, 895), (2, 21), (2, 22), (2, 23)]
      

      【讨论】:

        【解决方案3】:

        你可以试试这样的……

        lst = [(0,[0,1,2,3,4]),
                (1,[5,6,7,8,9])]
        
        for key, value in lst:
            lst1 = [key] * len(value) # has a list of key repeated n times
            print(list(zip(lst1,value)))
        

        输出

        [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)]
        [(1, 5), (1, 6), (1, 7), (1, 8), (1, 9)]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多