Как удалить все элементы списка, стоящие слева и добавить их в конец списка?
Хочу удалить все элементы списка, стоящие слева и добавить их в конец списка, вот код:
import random
randomtext = random.sample(range(1,50),7) #генерирую список из 7 случайных неповторяющихся чисел
print(randomtext)
newrandtext = []
print("Минимальное значение в ранд. сгенерированном списке: ",min(randomtext))
if min(randomtext) != randomtext[0]:
firstnum = list(randomtext[0:min(randomtext) + 1]) #это генерируется список из всех элементов, стоящих до минимального
randomtext.remove(firstnum) #здесь удаляю из первонач. списка те самые эл-ы которые идут до мин-го числа
newrandtext.append(randomtext2) #в пустой список добавяляю старый список но без первых чисел которые идут до мин-го
print("newrandtext:", newrandtext + firstnum) #вывожу список в котором идёт сначала мин число, затем все остальные, а после всех остальных идут те числа, что изначально стояли перед мин-ым
elif min(randomtext) == randomtext[0]:
print("Минимальное значение уже стоит на первом месте, значит спереди него нечего добавлять в конец списка. \n Повторите генерацию чисел снова.")
Выводит ошибку: ValueError: list.remove(x): x not in list. Как решить проблему?
Ответы (1 шт):
Нагородили вы тут много, откровенно говоря. Пройдёмся по ошибкам:
- Я так понимаю, что в этой строчке
firstnum = list(randomtext[0:min(randomtext) + 1]) #это генерируется список из всех элементов, стоящих до минимального
вы хотели взять список до минимального элемента. Но min(randomtext) - это значение из списка, а не индекс. Если вы хотите получить индекс, то используйте метод list.index(). И непонятно зачем вы делаете +1, если вам не нужно включать минимальный элемент в перенос. Выглядеть это должно так:
firstnum = randomtext[:randomtext.index(min(randomtext)):]
- Следующая строчка:
randomtext.remove(firstnum)
Методы remove удаляет первое вхождение элемента в список. Вы пытаетесь удалить из списка другой список, которого нет там. Если вы хотите просто срезать список, то можно было сделать так:
randomtext = randomtext[randomtext.index(min(randomtext))::]
- Следующая строчка. Здесь вообще не понятно, что вы делаете:
newrandtext.append(randomtext2)
Что такое randomtext2? Откуда он взялся, если в коде его не было. Судя по комментарию оставленным вами, это должен быть список, который содержит первые элементы до минимального. Но у нас же уже для этого есть firstnum. Ладно, с этим разобрались. И опять та же ошибка, что и в прошлом. Методы append добавляет в список переданный в него объект, т.е. он просто добавит список, а не элементы из него. Если вам нужно добавить элементы, то используйте методы extend или оператор +=:
newrandtext.extend(firstnum)
Теперь вернёмся к изначальной задаче. Нужно переставить элементы так, чтобы все элементы, что были до минимального оказались в конце. Эту задачу можно решить гораздо проще с помощью срезов:
import random
randomtext = random.sample(range(1,50),7)
ind = randomtext.index(min(randomtext))
randomtext = randomtext[ind::] + randomtext[:ind:]