Моя задача - удалить все экземпляры одного конкретного элемента ('6' в этом примере) и переместить их в конец списка. Требование состоит в том, чтобы пройти список, вносящий изменения в строке (не создавая дополнительных списков).Перемещение списка Python и внесение изменений на месте
Пример ввода: [6,4,6,2,3,6,9,6,1,6,5] Пример вывода: [4,2,3,9,1,5,6,6 , 6,6,6]
до сих пор я был в состоянии сделать это только за счет дополнительных списков (ломка требования задания), так что рабочий код не допускается:
def shift_sixes(nums):
b = []
c = 0
d = []
for i in nums:
if i == 6:
b.insert(len(nums),i)
elif i != 6:
c = c +1
d.insert(c,i)
ans = d + b
return ans
Я ve также попробовал list.remove()
и list.insert()
, но столкнулся с проблемой индексирования (который перемещается, когда I insert()
затем переместите элемент в конец): Например -
a = [6,4,6,2,3,6,9,6,1,6,5]
def shift_sixes(nums):
for i in nums:
if i == 6:
nums.remove(i)
nums.insert(nums[len(nums)-1], 0)
elif i != 0:
i
shift_sixes(a)
Кроме того, я пытался использовать функцию перечисления() следующим образом, но возникают проблемы с правой стороны от Ь [IDX] распайка линия:
for idx, b in enumerate(a):
a[idx] = ???
Читала другие записи StackOverflow here, here и here, но они не занимаются перемещением элемента на один конец.
Поблагодарили бы за любую помощь в этой проблеме. Большое спасибо.
EDIT @eph - спасибо. это действительно элегантный ответ. Я уверен, что он выполнит мое требование «нет нового списка»? Я обязательно намереваюсь больше узнать о лямбда и ее использовании. @falsetru - спасибо за напоминание о комбинации append/pop (которую я пытался сделать в своем исходном запросе через list.remove() и list.insert() @ tdelaney - также спасибо. Как-то ваш ответ ближе всего к тому, что я пытался, но, похоже, он не прошел тест на [0, 0, 5].
Использовать 'list.append'? –
Для сравнения времени вариантов замены на месте взгляните на это [ответ] (http://stackoverflow.com/a/24203748/307454) – lifebalance