将一个列表

时间:2016-04-02 15:26:39

标签: python

从字符串列表开始。每个字符串将具有相同数量的字符,但该数字不是预定的,也不是不相关的字符串总数。

以下是一个例子:

data = ['ABC', 'EFG', 'IJK', 'MNO']

我想要的最终输出是这样的:

[('A', 'E', 'I', 'M'), ('B', 'F', 'J', 'N'), ('C', 'G', 'K', 'O')]

我想要的输出是我在以某种方式使用zip()后期望看到的。我的问题是我找不到将一个数组的每个元素压缩在一起的正确方法。

基本上,我试图从一组行中获取列。

到目前为止我尝试了什么:

  1. 将数据拆分为二维列表:

    split_data = [list(row) for row in rows]

  2. 给了我:

    [['A', 'B', 'C'], ['E', 'F', 'G'], ['I', 'J', 'K'], ['M', 'N', 'O']]
    
    1. 尝试使用zip(),例如:

      zip(split_data)

    2. 我继续这样做:

      [(['A', 'B', 'C'],), (['E', 'F', 'G'],), (['I', 'J', 'K'],), (['M', 'N', 'O'],)]
      

      显然,它正在用任何东西压缩每个元素,导致它返回带有空白的原始数据。如何让zip()datasplit_data的每个元素视为应压缩的列表?

      我需要的是zip(data[0], data[1], data[2], ...)

1 个答案:

答案 0 :(得分:7)

只需解压缩 data

>>> data = ['ABC', 'EFG', 'IJK', 'MNO']
>>> zip(*data)
[('A', 'E', 'I', 'M'), ('B', 'F', 'J', 'N'), ('C', 'G', 'K', 'O')]

至于解释,我无法解释它比@Martijn在这里做得更好更简洁: