Проблема, связанная с Python метод вставки () - PullRequest
0 голосов
/ 21 сентября 2019

Я составляю список первых 10 квадратных чисел.Вот как я могу поместить первые 10 квадратных чисел в список:

    square=[]
    for i in range(1,10):
       square.insert(-1,i**2)
    print(square)

Я ожидаю, что вывод кода будет [1, 4, 9, 16, 25, 36, 49, 64, 81,] но фактический результат - [4, 9, 16, 25, 36, 49, 64, 81, 1]. Как я могу решить эту проблему, и, пожалуйста, вы можете объяснить, почему мой код не работает

Ответы [ 7 ]

2 голосов
/ 21 сентября 2019

Это не способ сделать это в Python, вы должны написать что-то вроде этого:

square = [i**2 for i in range(1,10)]

Причина, по которой вы получите такой результат, заключается в том, что вставка в -1-ую позицию вставит число вположение перед последним в списке, так что вы получите [1], [2,1], [2,4,1] и т. д. при выполнении цикла.

1 голос
/ 21 сентября 2019

В вашем коде может быть опечатка:

square.insert(-1, i**2)

может быть:

square.insert(i, i**2)

См. Рабочийдемо здесь .

0 голосов
/ 21 сентября 2019

Почему бы вам не попробовать:

square=[]
for i in range(1, 9):
    square.insert(i,i**2)
    print(square)

Ваш метод не работает, потому что вы начинаете с -1, что эквивалентно концу вашего списка, и после этого функция insert() переключается наначало вашего списка, чтобы заполнить его.

0 голосов
/ 21 сентября 2019

Вы вводите заказ с помощью -1.Это должно быть:

square = []

for i in range(1, 10):
    square.insert(10, i**2)
print(square)

вывод:

[1, 4, 9, 16, 25, 36, 49, 64, 81]
0 голосов
/ 21 сентября 2019

Если вам нужно использовать insert, используйте len(square) вместо -1 в качестве аргумента индекса.

Когда вы вызываете insert(), он вставляет новый элемент перед элементом в заданноминдекс.Когда индекс отрицательный, он считается с конца.Таким образом, square.insert(-1, newvalue) означает вставку нового элемента перед последним элементом, а не после него.

В первый раз список пуст, поэтому нет последнего элемента, который поместил бы его раньше, и он просто добавляется в список.Но на всех других итерациях он вставляется перед этим элементом, поэтому он остается в конце.

Если вы используете len(square) в качестве индекса, это после последнего элемента, поэтому вставка до того, как он помещает его в конец.

square=[]
for i in range(1,10):
   square.insert(len(square),i**2)
print(square)

Я не думаю, что есть способ сделать это, используя отрицательный индекс.

0 голосов
/ 21 сентября 2019

Вы можете использовать функцию append.Это должно выглядеть примерно так:

square=[]
for i in range(1, 10):
    square.append(i**2)
print(square)
0 голосов
/ 21 сентября 2019

Попробуйте это:

square=[]
num=10
for i in range(1,num):
    square.insert(num,i**2)
print(square)

Функция вставки точно принимает два аргумента

list_name.insert(index, element)

теперь в приведенном выше коде каждый элемент пытается быть вставлен в 10-й индекс, тогда как списокпусто, поэтому каждый элемент заполняет пустое место перед 10-м индексом.И если дать -1 в качестве индекса, то приращение для индекса будет -1,0,1,2,3,4,5 ... вот почему вы получили

>[4, 9, 16, 25, 36, 49, 64, 81, 1]
...