当我运行它时,它会给我错误:
TypeError:'zip'对象不可订阅
我该怎么办?
答案 0 :(得分:4)
在Python 3中,zip()
返回迭代器,而不是列表。您可以将其转换为列表:
columns = list(zip(*rows))
float_columns = [map(float, col) for col in columns[1:]]
使用itertools.islice
选择除第一个元素之外的所有内容
from itertools import islice
columns = zip(*rows)
float_columns = [map(float, col) for col in islice(columns, 1)]
或使用next()
跳过第一个元素:
columns = zip(*rows)
next(columns, None) # skip the first column
float_columns = [map(float, col) for col in columns]
请注意,map()
也返回迭代器,而不是列表。这可能适合您的目的。
例如,如果要查找每列的最大值,可以将其组合:
columns = zip(*rows)
next(columns, None) # skip the first column
max_columns = [max(map(float, col)) for col in columns]
答案 1 :(得分:2)
您正在使用Python 3,其中zip返回一个可迭代的,而不是列表。
因此,通过将其转换为列表,您可以解决问题。
columns = list(zip(*rows))
此外,您可以通过以下方式跳过第一列,在这种情况下,您可以删除切片。
columns = zip(*rows)
next(columns, 0)