将行列表转换为列

时间:2018-01-25 21:35:02

标签: python python-3.x

foo = ['123','123','123]

我正在尝试将foo变为:

revisedfoo = ['111', '222', '333']

这实际上是将“行”变为“列”:

111
222
333

我尝试过以下几点:

    for j in range(len(foo)):
        for i in range(len(foo)):
            revisedfoo.append(foo[i][j])

但它离开了我:

revisedfoo = ['1','1','1','2','2','2','3','3','3']

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:4)

使用zip()和星号运算符:

>>> [''.join(i) for i in zip(*foo)]
['111', '222', '333']

解释

zip(*foo) "unzips" foo,例如:

>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True

所以在这种情况下:

# You need to call `list()`, because `zip()` returns
#     an iterator in Python 3.x
>>> list(zip(*foo))
[('1', '1', '1'), ('2', '2', '2'), ('3', '3', '3')]

然后,在每个子元素(元组)上,我们希望将各个元素连接成一个字符串。 ''.join(seq)是解决此问题的标准方法。