Я пытаюсь упорядочить список, сгенерированный в порядке возрастания.

Использование remove в моем цикле while работает. Но если я использую pop, я продолжаю получать IndexError: Pop index вне диапазона.

Я также попытался увеличить длину списка values, когда будет выполнена последняя итерация; на while len(values) > 1, и я все еще получаю ту же ошибку.

Может кто-нибудь объяснить, почему я продолжаю получать эту ошибку при использовании pop, а не при удалении?


#import randrange
from random import randrange

#generate a list of values
values = []
for i in range(1, 10):
   values.append(randrange(1, 10))
print(values)

#initiate list for keeping minimum values
new_values = []

#define how least value would be determined
while len(values) > 0 :
   new_values.append(min(values))
   values.pop(min(values))


print(new_values)

-1
Nnaobi 31 Май 2020 в 03:35

3 ответа

Лучший ответ

Pop вводит в список index , а не значение, присутствующее в списке. См. list.pop ([i]).

Также см. Документы по сортировке.

0
Chris 31 Май 2020 в 00:48

Вам нужно передать index в pop, а не в значение, которое вы хотите удалить (list.pop документы)

Если вы действительно должны использовать pop , вы можете использовать numpy.argmin, чтобы получить индекс минимального значения, подобный этому:

import numpy as np
new_values = []

#define how least value would be determined
while len(values) > 0 :
    new_values.append(min(values))
    values.pop(np.argmin(values))

Но если вы просто сортируете список, почему бы не использовать отсортированная встроенная функция?

new_values = sorted(values)
0
eusoubrasileiro 31 Май 2020 в 00:58

Вы предоставляете прямые значения для pop во время записи values.pop(min(values)), вместо этого вы должны указать позицию индекса.

0
Torxed 31 Май 2020 в 00:48