【问题标题】:Pairing up arrays of different length in Python在 Python 中配对不同长度的数组
【发布时间】:2019-10-21 16:32:53
【问题描述】:

给定两个不同长度的数组:

Column_a = [0, 1, 2, 3]
Column_b = [a, b, c, d, e, f, g, h, i, j]

我想将它们配对并提供一个DataFrame,以便Column_b中的所有元素与Column_a的一个元素配对:

print(df)
               Column_a  Column_b
               0         a
               1         b
               2         c
               3         d
               1         e
               2         f
               3         g
               0         h
               1         i
               2         j

【问题讨论】:

    标签: python loops iterator one-to-many itertools


    【解决方案1】:

    试试itertools.cycle:

    from itertools import cycle
    
    Column_a = [0, 1, 2, 3]
    Column_b = 'abcdefghij'
    df = zip(cycle(Column_a if len(Column_a) < len(Column_b) else Column_b),
             Column_b if len(Column_a) < len(Column_b) else Column_a)
    print(list(df))
    

    输出:

    [(0, 'a'),
     (1, 'b'),
     (2, 'c'),
     (3, 'd'),
     (0, 'e'),
     (1, 'f'),
     (2, 'g'),
     (3, 'h'),
     (0, 'i'),
     (1, 'j')]
    

    请注意,Python 中的字符串值可以用作可迭代对象。

    【讨论】:

      【解决方案2】:

      您可以执行一个简单的 for 循环来迭代最长的列并创建一个包含每个元素 x 的元组列表,并分配给元素 [index_of_x % length_shortest_column]。

      例如:

      df = []
      for i,x in enumerate(column_b):
          df.append( (x, column_a[i % len(a)]) )
      

      这应该让您获得以下信息(假设 column_b 包含字符):

      df = [('a', 0), ('b', 1), ('c', 2), ('d', 3),
            ('e', 0), ('f', 1), ('g', 2), ('h', 3),
            ('i', 0), ('j', 1)]
      

      您可能希望对 df 使用不同的数据结构,但总体思路仍然相同。唯一重要的一点是您应该遍历最长的列表。也许有更好的方法来做到这一点,但如果你在紧要关头,这应该会让你继续前进。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-20
        • 2013-02-24
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        • 1970-01-01
        • 2018-07-09
        • 2015-08-24
        相关资源
        最近更新 更多