TypeError:'zip'对象不可订阅

时间:2013-04-04 08:48:22

标签: python python-3.x

当我运行它时,它会给我错误:

  

TypeError:'zip'对象不可订阅

我该怎么办?

2 个答案:

答案 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)