代码之家  ›  专栏  ›  技术社区  ›  Will

如何在python中以键值对的形式打印数组?

  •  1
  • Will  · 技术社区  · 7 年前

    我有一组数组,如

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

    有没有办法表明这个结果是键值对的形式,比如

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

    i 将在键中获得增量1,该值将不包括在值列表中


    我试过这样做,但没能把它变成所需的形式。

    c = [id for id in b if id != i] for i, b in enumerate(a)]
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   jpp    7 年前

    使用列出理解 enumerate 是一种方式。请注意每个单项键后的逗号。这表示对象类型是 元组 长度为1。

    from numpy import array
    
    a = [array([0, 1, 2, 3, 4]), array([0, 1, 2, 3]), array([0, 1, 2, 3, 4]),
         array([0, 1, 2, 3, 4, 5, 6, 7, 8]), array([0, 2, 3, 4, 5, 8, 9])]
    
    res = [[(i,), tuple(j for j in arr if j != i)] for i, arr in enumerate(a)]
    
    # [[(0,), (1, 2, 3, 4)],
    #  [(1,), (0, 2, 3)],
    #  [(2,), (0, 1, 3, 4)],
    #  [(3,), (0, 1, 2, 4, 5, 6, 7, 8)],
    #  [(4,), (0, 2, 3, 4, 8, 9)]]
    

    或者,您可以创建字典:

    res_dict = {i: tuple(j for j in arr if j != i) for i, arr in enumerate(a)}
    
    # {0: (1, 2, 3, 4),
    #  1: (0, 2, 3),
    #  2: (0, 1, 3, 4),
    #  3: (0, 1, 2, 4, 5, 6, 7, 8),
    #  4: (0, 2, 3, 4, 8, 9)}
    
        2
  •  0
  •   Aaditya Ura    7 年前

    您可以尝试numpy方法:

    import numpy as np
    
    a = [np.array([0, 1, 2, 3, 4]),np.array([0, 1, 2, 3]),np.array([0, 1, 2, 3, 4]),
         np.array([0, 1, 2, 3, 4, 5, 6, 7, 8]), np.array([0, 2, 3, 4, 5, 8, 9])]
    
    print([[(i,),tuple(np.delete(j,np.argwhere(j==i)))] for i,j in enumerate(a)])
    

    输出:

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