Как удалить все элементы списка, стоящие слева и добавить их в конец списка?

Хочу удалить все элементы списка, стоящие слева и добавить их в конец списка, вот код:

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 шт):

Автор решения: nyekitka

Нагородили вы тут много, откровенно говоря. Пройдёмся по ошибкам:

  1. Я так понимаю, что в этой строчке
firstnum = list(randomtext[0:min(randomtext) + 1]) #это генерируется список из всех элементов, стоящих до минимального

вы хотели взять список до минимального элемента. Но min(randomtext) - это значение из списка, а не индекс. Если вы хотите получить индекс, то используйте метод list.index(). И непонятно зачем вы делаете +1, если вам не нужно включать минимальный элемент в перенос. Выглядеть это должно так:

firstnum = randomtext[:randomtext.index(min(randomtext)):]
  1. Следующая строчка:
randomtext.remove(firstnum)

Методы remove удаляет первое вхождение элемента в список. Вы пытаетесь удалить из списка другой список, которого нет там. Если вы хотите просто срезать список, то можно было сделать так:

randomtext = randomtext[randomtext.index(min(randomtext))::]
  1. Следующая строчка. Здесь вообще не понятно, что вы делаете:
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:]
→ Ссылка