#python #list
Вопрос:
Ниже у меня есть код. В ex2
и ex3
, lst[2]
и lst[3]
показывают разные выходные данные. Например:
At ex3, lst[2] shows the output of 5 which is correct but
at ex2, lst[2] shows the output of 4 which is not correct because lst[2] should be added by 2, not by one
Это почему? Что я набрал не так?
Я новичок в python, поэтому любая помощь была бы полезна.
Спасибо
def add_indexes(lst):
for x in range(len(lst)):
if lst[x] == lst[0]:
lst[x] = 0
elif lst[x] == lst[1]:
lst[x] = 1
elif lst[x] == lst[2]:
lst[x] = 2
elif lst[x] == lst[3]:
lst[x] = 3
elif lst[x] == lst[4]:
lst[x] = 4
return lst
ex1 = [0, 0, 0, 0, 0]
ex2 = [1, 2, 3, 4, 5]
ex3 = [5, 4, 3, 2, 1]
print(add_indexes(ex1))
print(add_indexes(ex2))
print(add_indexes(ex3))
Комментарии:
1. Я не понимаю, что должен делать код или почему результат должен быть значимым.
2. У меня есть задача, которая требует: «Учитывая список чисел, создайте функцию, которая возвращает список, но с индексом каждого элемента в списке, добавленным к самому себе. Это означает, что вы добавляете 0 к числу с индексом 0, добавляете 1 к числу с индексом 1 и т. Д.»
3. @Arimmjow: Ваш код не выполняет то, что вы описали. Вам не нужно делать никаких тестов (если заявления). Просто пройдитесь по диапазону списка и добавьте
lst[x] = x
.
Ответ №1:
Причина в том, что вы сначала обновляете значения для lst[1] от 2 до 3, что означает, что на следующей итерации вместо этого будет применяться lst[1] == lst[2].
Начало
lst = [1,2,3,4,5]
Итерация 0:
x=0 => nothing changes
Итерация 1:
x=1 => lst[1] == lst[1] => lst[1] =1 => lst[1] =3
Итерация 2:
x=2 => lst[2] == lst[1] => lst[2] =1 => lst[2] =3
Для вашего требования вы можете просто использовать понимание списка:
ex2 = [1, 2, 3, 4, 5]
result = [x ind for ind, x in enumerate(ex2)]
Выход:
>>> result
[1, 3, 5, 7, 9]
Ответ №2:
Это потому, что вы увеличиваете список на лету, после 2 циклов у вас есть что-то подобное:
lst = [1,3,3,4,5]
так что условие:
elif lst[x] == lst[1]:
lst[x] = 1
становится реальным, и вы увеличиваете 3 на 1 вместо увеличения на 2.
Попробуйте добавить операцию в копию списка или в пустой список и добавьте элементы.
Ответ №3:
Из комментария ОП:
Учитывая список чисел, создайте функцию, которая возвращает список, но с добавлением индекса каждого элемента в списке к себе. Это означает, что вы добавляете 0 к числу с индексом 0, добавляете 1 к числу с индексом 1 и т. Д…
Функция может быть такой простой, как эта:
def add_indexes(lst):
for x in range(len(lst)):
if lst[x] = x:
return lst
Ответ №4:
Ошибка:
You are changing the values iteratively, so when x = 2 already lst[1] is 3, so it's adding only 1 to lst[2]
Я думаю, что вы пытаетесь добавить числа, основываясь на их положении в списке. Вы можете просто сделать это:
ex1 = [0, 0, 0, 0, 0]
for i in range(len(ex1)):
ex1[i] = i
print(ex1)
выход:
[0, 1, 2, 3, 4]
Ответ №5:
Я бы рекомендовал сделать это по-другому —
[np.sum(i) for i in enumerate(ex2)]
[1, 4, 6, 9, 13]
[np.sum(i) for i in enumerate(ex2)]
[5, 6, 7, 8, 9]
Ответ №6:
Я вижу здесь много правильных ответов,но я хотел бы указать на ошибку, которую вы совершили.
Из того ,что я мог видеть, вы пытаетесь проверить каждый отдельный случай индекса в своем списке и добавляете соответствующий индекс к значению, хранящемуся в этом конкретном списке. Рассматривая с этой точки зрения условие «если», которое вы выбрали:
if lst[x] == lst[0]:
elif lst[x] == lst[1]:
elif lst[x] == lst[2]:
elif lst[x] == lst[3]:
elif lst[x] == lst[4]:
Это проверяет, равно ли значение текущего индекса значению каждого индекса 0,1,2,3,4. Это делает список динамичным, как объясняет @CanciuCostin.
Правильный способ сделать это будет выглядеть примерно так:
for x in range(len(lst)):
if x == 0:
lst[x] = 0
elif x == 1:
lst[x] = 1
elif x == 2:
lst[x] = 2
elif x == 3:
lst[x] = 3
elif x == 4:
lst[x] = 4
Но это неэффективный способ.Спасибо @Sai Sreenivas за его улучшенный эффективный код для решения вашей проблемы.