从字符串列表开始。每个字符串将具有相同数量的字符,但该数字不是预定的,也不是不相关的字符串总数。
以下是一个例子:
data = ['ABC', 'EFG', 'IJK', 'MNO']
我想要的最终输出是这样的:
[('A', 'E', 'I', 'M'), ('B', 'F', 'J', 'N'), ('C', 'G', 'K', 'O')]
我想要的输出是我在以某种方式使用zip()
后期望看到的。我的问题是我找不到将一个数组的每个元素压缩在一起的正确方法。
基本上,我试图从一组行中获取列。
到目前为止我尝试了什么:
将数据拆分为二维列表:
split_data = [list(row) for row in rows]
给了我:
[['A', 'B', 'C'], ['E', 'F', 'G'], ['I', 'J', 'K'], ['M', 'N', 'O']]
尝试使用zip()
,例如:
zip(split_data)
我继续这样做:
[(['A', 'B', 'C'],), (['E', 'F', 'G'],), (['I', 'J', 'K'],), (['M', 'N', 'O'],)]
显然,它正在用任何东西压缩每个元素,导致它返回带有空白的原始数据。如何让zip()
将data
或split_data
的每个元素视为应压缩的列表?
我需要的是zip(data[0], data[1], data[2], ...)
答案 0 :(得分:7)
只需解压缩 data
:
>>> data = ['ABC', 'EFG', 'IJK', 'MNO']
>>> zip(*data)
[('A', 'E', 'I', 'M'), ('B', 'F', 'J', 'N'), ('C', 'G', 'K', 'O')]
至于解释,我无法解释它比@Martijn在这里做得更好更简洁: