Сравнение ссылок в Java

Ваша логика сбита с толку, почему вы выполняете итерацию по списку удаления, del1, а затем внутри итерации по s (или l).

Это не имеет смысла.

Вместо этого просто удалите элементы из del1, как вы идете.

l = [1,5,10,5,10]
del1 = [5,10]
a = []
for element in l:
   if element in del1:
       del1.remove(element)
   else:
       a.append(element)

давая a как [1, 5, 10].


Более эффективный способ - использовать объект collections.Counter.

import collections
l = [1,5,10,5,10]
del1 = [5,10]
a = []
dels_to_go = collections.Counter(del1)
for element in l:
    if dels_to_go[element]:
        dels_to_go[element] -= 1
    else:
        a.append(element)

, который дает тот же вывод, что и раньше.


Обратите внимание, у вас может возникнуть желание использовать set(), но это не сработает в случае del1, содержащего повторяющиеся значения.

12
задан tunaranch 20 October 2008 в 01:01
поделиться

3 ответа

Использовать == на объектах выполнить сравнение идентификационных данных.

Именно это реализация по умолчанию equals() делает, но каждый обычно переопределяет equals() служить "эквивалентным содержанием" проверка.

33
ответ дан 2 December 2019 в 03:39
поделиться

Это - то, что == делает оператор.

6
ответ дан 2 December 2019 в 03:39
поделиться

Поведение по умолчанию равняется (), должен сравнить два объекта с помощью == оператор. Таким образом, если Вы хотите использование поведения по умолчанию ==, если Вы хотите свое переопределенное использование поведения, равняется ().

1
ответ дан 2 December 2019 в 03:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: