尝试以下方法:
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]



