Python Выводит Неправильные Выходные Данные

#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 за его улучшенный эффективный код для решения вашей проблемы.