Я выбрал немного другую процедуру для удаления дубликатов списка. Я хочу параллельно вести новый список, в который добавляется каждый дубликат. После этого я проверяю, присутствует ли элемент во «вновь созданном списке», чтобы удалить его.
Код выглядит следующим образом:
# nums = [1,1,2] or [0,0,1,1,1,2,2,3,3,4]
t = []
nums_new = nums
for i in nums:
if nums[i] not in t:
t.append(nums[i])
else:
nums_new.remove(nums[i])
nums = nums_new
print(nums)
Для случая, когда nums = [1,1,2] это работает нормально и возвращает [1,2].
Однако для nums = [0,0,1,1,1,2,2,3,3,4] этот случай, похоже, не работает, так как я получаю следующий вывод: [0, 1, 2, 2, 3, 3, 4].
Почему это? Может ли кто-нибудь объяснить мне шаги?
@SembeiNorimaki, если я это сделаю, я все равно каким-то образом получу неверный список ...
пожалуйста, отредактируйте свой вопрос с обновленным кодом, списком ввода, который вы используете, и результатом, который вы получаете
Есть ли мотивация не делать nums = list(set(nums))? Обратите внимание, что удаление элементов из списка во время повторения чревато опасностью.
Если бы вы только не выбрали тестовые примеры, в которых все элементы являются допустимыми индексами, например nums = ['1', '1', '2']... (Разве то, что вы хотите сделать, не оставит вас с двумя идентичными списками?)






Есть две проблемы с вашим кодом:
Поскольку вы перебираете список, for i in nums, i — это ваше фактическое число, а не индексатор, поэтому вы должны просто использовать i вместо nums[i].
nums_new = nums на самом деле не будет копировать nums, а вместо этого сделает вторую привязку к тому же списку. Поэтому вы должны написать nums_new = nums.copy(), чтобы избежать изменения исходного списка, пока вы его повторяете.
С этими двумя изменениями ваш код работает так, как вы хотите:
nums = [0,0,1,1,1,2,2,3,3,4]
t = []
nums_new = nums.copy()
for i in nums:
if i not in t:
t.append(i)
else:
nums_new.remove(i)
nums = nums_new
print(nums)
Возвращает [0,1,2,3,4].
Конечно, это своего рода академическое упражнение, но обратите внимание, что Pythonic способ удалить дубликаты из списка:
list(dict.fromkeys(nums)) если хотите сохранить порядок, иlist(set(nums)) для более быстрого метода, если вам не важен порядок.я тоже знаю этот подход, но мой вариант использования был таким, что мне пришлось выбрать этот подход. Но я, должно быть, забыл .copy(). Спасибо за объяснение!
for i in numsделаетiэлементомnums, а не индексом. поэтому вместоnums[i]вы должны просто использоватьi