【问题标题】:String-formatting two zipped NumPy arrays in Python 3在 Python 3 中对两个压缩的 NumPy 数组进行字符串格式化
【发布时间】:2019-01-08 14:04:21
【问题描述】:

我想用pythons格式函数打印一个numpy数组的后续数字。

我有两个 numpy 数组,比如说:

x=[1 2 3 4]
y=[5 6 7 8]

现在我想打印这个:

1 5 2 6 3 7 4 8

我几乎可以通过以下方式实现:

print('{} {} {} {}'.format(*zip(x,y)))

但它会产生:

(1,5) (2,6) (3,7) (4,8)

当然可以

"{} {} {} {}".format(x[0], y[0], x[1], y[1])

等等,但这需要知道数组的长度。

注意: 这行代码做我想做的事

print(*["%f %f"%(a,b) for a,b in zip(x,y)])

但这确实使用了旧的格式样式,我想知道是否也可以使用新的格式样式。我觉得它看起来也有点时髦:-D

【问题讨论】:

  • 所以使用print(*["{} {}".format(a, b) for a,b in zip(x,y)])。你已经完成了 99% 的路程。您可以删除列表:print(*("{} {}".format(a, b) for a,b in zip(x,y)))

标签: python arrays python-3.x list numpy


【解决方案1】:

执行以下操作:

x=[1, 2, 3, 4]
y=[5, 6, 7, 8]

result = ' '.join([str(i) for e in  zip(x, y) for i in e])
print(result)

输出

1 5 2 6 3 7 4 8

【讨论】:

    【解决方案2】:

    您可以使用itertools.chain 将两个列表中的元素交错:

    list(chain.from_iterable(zip(x, y)))
    [1, 5, 2, 6, 3, 7, 4, 8]
    

    如果你想打印你指定的所有元素,你可以这样做:

    print(*chain.from_iterable(zip(x, y)))
    1 5 2 6 3 7 4 8
    

    【讨论】:

      【解决方案3】:

      一些 numpy

      怎么样
      np.array(list(zip(a,b))).flatten()
      

      输出

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

      【讨论】:

        【解决方案4】:

        您可以使用zip() 同时遍历两个可迭代对象。

        l1 = [0, 2, 4, 6, 8]
        l2 = [1, 3, 5, 7, 9]
        
        for i, j in zip(l1, l2):
            print(i)
            print(j)
        

        输出:

        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
        

        【讨论】:

          【解决方案5】:

          既然你用的是numpy,那呢

          >>> ' '.join(np.vstack((x, y)).T.flatten().astype(str))
          '1 5 2 6 3 7 4 8'
          

          【讨论】:

            【解决方案6】:

            itertools.starmap 也可以:

            >>> print(*starmap("{} {}".format, zip(x, y)))
            1 5 2 6 3 7 4 8
            

            通常,@yatu 和itertools.chain 给出的方法是可行的方法,特别是如果您希望所有元素都用空格分隔。但是starmap 可能会派上用场,例如:

            >>> print(*starmap("{}:{}".format, zip(x, y)))
            1:5 2:6 3:7 4:8
            

            【讨论】:

              【解决方案7】:

              把另一个混在一起

              ("{} "*len(x)*2).format(*np.ravel(list(zip(x,y))))
              
               '1 5 2 6 3 7 4 8 '
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-11-03
                • 1970-01-01
                • 1970-01-01
                • 2013-10-10
                • 2012-12-06
                • 2012-02-28
                • 1970-01-01
                相关资源
                最近更新 更多