Skip to main content
 首页 » 编程设计

Python ZIP 函数给出了意外的输出

2025年05月04日15lidabo

我正在努力让 Python 2.7 的 zip 函数工作以提供我需要的输出。

我拥有的数据示例:

print(score_data[0:3]) 
[['0/1:7,3:10:99', '0/0:3:3:99'], ['0/0:12:12:99', '0/1:11,7:18:99'], ['0/1:8,7:15:99', '0/1:14,4:18:99']] 

我想要的输出类型

[['0/1:7,3:10:99','0/1:8,7:15:99', '0/0:12:12:99'], [ '0/1:11,7:18:99','0/0:3:3:99', '0/1:14,4:18:99']] 

我得到的输出:

print(zip(score_data[0:3])) 
[(['0/1:7,3:10:99', '0/0:3:3:99'],), (['0/0:12:12:99', '0/1:11,7:18:99'],), (['0/1:8,7:15:99', '0/1:14,4:18:99'],)] 

请您参考如下方法:

您在一个列表上错误地应用了 zip。 zip 没有提示,但它只是向您的列表添加一个元组维度,没有多大用处:

>>> list (zip([1,2,3,4])) 
[(1,), (2,), (3,), (4,)] 

您需要将子列表扩展为位置参数(使用 * 运算符)以传递给 zip:

z = [['0/1:7,3:10:99', '0/0:3:3:99'], ['0/0:12:12:99', '0/1:11,7:18:99'], ['0/1:8,7:15:99', '0/1:14,4:18:99']] 
 
print(list(zip(*z)))   # convert to list for python 3 compat. 

结果:

[('0/1:7,3:10:99', '0/0:12:12:99', '0/1:8,7:15:99'), ('0/0:3:3:99', '0/1:11,7:18:99', '0/1:14,4:18:99')] 

请注意,zip 默认情况下会发布元组。改为创建 list 类型:

print([list(x) for x in zip(*z)]) 

结果:

[['0/1:7,3:10:99', '0/0:12:12:99', '0/1:8,7:15:99'], ['0/0:3:3:99', '0/1:11,7:18:99', '0/1:14,4:18:99']]