Самая большая проблема с вашим кодом в том, что он нечитаем. Правило кода Python номер один: если он нечитаем, никто не будет смотреть на него достаточно долго, чтобы извлечь из него какую-либо полезную информацию. Всегда используйте описательные имена переменных. Чуть не уловил ошибку в вашем коде, давайте посмотрим еще раз с хорошими именами, в стиле замедленного воспроизведения:
to_modify = [5,4,3,2,1,0]
indexes = [0,1,3,5]
replacements = [0,0,0,0]
for index in indexes:
to_modify[indexes[index]] = replacements[index]
# to_modify[indexes[index]]
# indexes[index]
# Yo dawg, I heard you liked indexes, so I put an index inside your indexes
# so you can go out of bounds while you go out of bounds.
Очевидно, что когда вы используете описательные имена переменных, вы индексируете список индексов со значениями из самого себя, что в данном случае не имеет смысла.
Кроме того, при параллельном переборе двух списков мне нравится использовать функцию zip
(или izip
, если вы беспокоитесь о потреблении памяти, но я не из тех, кто придерживается чистоты итераций). Так что попробуйте это вместо этого.
for (index, replacement) in zip(indexes, replacements):
to_modify[index] = replacement
Если ваша проблема заключается только в работе со списками чисел, я бы сказал, что у @steabert есть ответ, который вы искали, с помощью этого бестолкового материала. Однако вы не можете использовать последовательности или другие типы данных переменного размера в качестве элементов массивов numpy, поэтому, если в вашей переменной to_modify
есть что-то подобное, вам, вероятно, лучше всего делать это с помощью цикла for.
person
machine yearning
schedule
29.08.2011
l
содержит индексы за пределами m)? Можете ли вы дать больше контекста для проблемы? - person dbr   schedule 29.08.2011