【问题标题】:How to join elements as strings with a delimiter from a group of arrays column-wise如何将元素作为字符串与一组数组中的分隔符按列连接
【发布时间】:2018-04-02 15:22:40
【问题描述】:

我有以下数组(长度都一样):

array_1=[1,2,3]
array_2=[4,5,6]
array_3=[7,8,9]

我需要的是连接两个数组中的每个元素以获得:

array_4=['1-4-7','2-5-8','3-6-9']

这必须完成大约 30000 条记录,所以我正在寻找紧凑的东西。

【问题讨论】:

  • “这需要处理大约 30000 条记录,所以我在寻找紧凑的东西,” 你的意思是 fast
  • 你有没有尝试过?也许str.join()?还不足以解决您的问题吗?
  • 您的数组是如何存储的?肯定不是array_1=[1, 2, 3], ..., array_30000=[4, 5, 6]?这会对方法产生很大影响。

标签: python string-concatenation


【解决方案1】:

使用zip() 隔离列,使用str() 从每个元素创建字符串,使用str.join() 将字符串化的元素连接在一起。

array_1=[1,2,3]
array_2=[4,5,6]
array_3=[7,8,9]

meta_array = [array_1, array_2, array_3]
array_4 = ['-'.join(str(item) for item in column) for column in zip(*meta_array)]

assert array_4==['1-4-7','2-5-8','3-6-9']

【讨论】:

    【解决方案2】:

    在我看来,您希望拥有一个新的字符串数组,其中包含来自 所有数组 中某个位置的元素。如果数组的数量很少,下面的代码应该是一个可能的解决方案:

    for index in range(len(array_1)):
        newFormedElement = str(array_1[index]) + '-' + str(array_2[index]) + '-' + str(array_3[index])
        array_4.append(newFormedElement)
    

    假设 records 是指数组中的元素数。 但是,如果您使用 30000 个数组,您可能希望使用 numpy 并遍历整个数组列表。

    【讨论】:

    • 谢谢,抱歉没有使用正确的行话,我的记录是指数组中的元素数。
    【解决方案3】:

    使用numpy.column_stack()的另一种方式:

    import numpy as np
    array_1=[1,2,3]
    array_2=[4,5,6]
    array_3=[7,8,9]
    
    col_stacked = np.column_stack([array_1, array_2, array_3])
    print(col_stacked)
    #array([[1, 4, 7],
    #       [2, 5, 8],
    #       [3, 6, 9]])
    

    现在只需遍历col_stacked 并将值与"-" 连接起来。首先我们需要将值转换为str,这可以使用map()来完成:

    array_4 = ["-".join(map(str, a)) for a in col_stacked]
    print(array_4)
    #['1-4-7', '2-5-8', '3-6-9']
    

    注意column_stack() 仅在所有数组长度相同时才有效。

    【讨论】:

      【解决方案4】:

      您可以使用字符串格式:

      array_1=[1,2,3]
      array_2=[4,5,6]
      array_3=[7,8,9]
      last_result = ['{}-{}-{}'.format(*i) for i in zip(array_1, array_2, array_3)]
      

      输出:

      ['1-4-7', '2-5-8', '3-6-9']
      

      【讨论】:

        猜你喜欢
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多