-1

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

TypeError:“zip”对象不可下标

我应该怎么办?

4

2 回答 2

5

在 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]
于 2013-04-04T08:53:43.303 回答
3

您正在使用 Python 3,其中 zip 返回一个可迭代的,而不是一个列表。

因此,通过将其转换为列表,您可以解决您的问题。

columns = list(zip(*rows))

此外,您可以按以下方式跳过第一列,在这种情况下,您可以删除切片。

columns = zip(*rows)
next(columns, 0)
于 2013-04-04T09:01:12.770 回答