代码之家  ›  专栏  ›  技术社区  ›  Red Cricket

交换行和列以了解列表

  •  3
  • Red Cricket  · 技术社区  · 7 年前

    这是我得到的

    >>> v = [[x for x in range(4)] for x in range(4)]
    >>> h = [[x for x in range(4)] for x in range(4)]
    >>> v
    [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
    >>> for i in range(len(v[0])):
    >>>    for j in range(len(v[0])):
    >>>        h[j][i] = v[i][j]
    ...        
    >>> h
    [[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]]
    

    如何用列表理解而不是嵌套的for循环生成h?

    更新:

    谢谢大家的精彩回答,我很抱歉在我原来的帖子中没有更清楚地表达。我应该初始化 v 像这样:

    >>> v = [[randint(0,10) for x in range(4)] for x in range(4)]
    

    例如 V 是:

    >>> v
    [[5, 1, 0, 5], [8, 9, 9, 10], [3, 7, 1, 1], [6, 6, 10, 7]]
    >>> for i in range(len(v[0])):
    >>>    for j in range(len(v[0])):
    >>>        h[j][i] = v[i][j]
    ...     
    >>> h
    [[5, 8, 3, 6], [1, 9, 7, 6], [0, 9, 1, 10], [5, 10, 1, 7]]
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   sacuL    7 年前

    zip

    list(map(list,zip(*v)))
    
    # [[0, 0, 0, 0], [1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]]
    

    map

    list(zip(*v))
    # [(0, 0, 0, 0), (1, 1, 1, 1), (2, 2, 2, 2), (3, 3, 3, 3)]
    
        2
  •  1
  •   Yakov Dan    7 年前

    [[y for x in range(4)] for y in range(4)]
    
        3
  •  1
  •   Gerard Rozsavolgyi    7 年前

    h = [ v[j][i] for i in range(4) for j in range(4)  ]