尝试以下方法:
for i in xrange(len(data)):
data[i] = "everything"
您遇到的基本问题是,当你写的data[i]
,有data
是一个列表,则i
需要是一个整数,数字索引列表。但是在循环中
for item in data
item
是列表中的实际事物,即字符串,而不是事物的数字索引。xrange
是一个迭代器,它生成数字而不是列表中的值,因此您可以使用它。
一个替代方案是
for i, _ in enumerate(data):
data[i] = "everything"
该enumerate
函数为您提供了一个在表单元组上进行迭代的迭代器(index, item)
,因此您所需要做的就是获取索引而忽略该项目。我不确定一种方式或另一种方式(enumerate
或方式xrange
)是否会明显更快或更佳,因为我认为列表将其长度存储在变量中,因此可以快速访问它而无需计算列表元素。
但是,如果您需要旧的列表值来计算新的列表值,则此enumerate
方法可能会稍快一些,因为可以避免让Python查找列表中的元素:
for i, item in enumerate(data):
data[i] = func(item)
这类事情最好用列表理解来表达:
data = [func(item) for item in data]
执行此操作时,Python将遍历中的每个项目data
,对其应用功能,并根据结果自动构造一个新列表,因此您不必担心将结果func(item)
放在列表中的正确位置。您原来的示例实际上可以表示为
data = ["everything" for item in data]