Попробуйте это вместо этого:
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]
person
David Z
schedule
04.07.2010