Как проверить наличие дублирующихся значений в списке, игнорируя определенное значение? - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь определить, есть ли в списке повторяющиеся значения.Мой список состоит только из цифр, и я только хочу найти ненулевые дубликаты.Поэтому, если мой список [0,4,0], я не хочу, чтобы моя программа считала его дубликатами (так как я игнорирую 0 s), но если мой список [3,0,3], моя программа должна сообщить мне, чтодубликаты.

Я пытался использовать этот код:

Mylist = [0,4,0]
if len(Mylist) == len(set(Mylist)):
    print('The list does not have duplicates')
else:
    print('The list has duplicates')

Код работает, но он учитывает 0 s, которые я не хочу.Я знаю, что мог бы создать цикл с несколькими строками кода, который проверяет каждое значение, но мне интересно, есть ли простой и короткий способ сделать это.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Вы можете избежать создания нового списка с отфильтрованными значениями и постепенно наращивать набор и сокращать его, используя что-то вроде:

any(map(lambda L, I={0}, S=set(): (L not in I and L in S) or S.add(L), your_list))

Это вернет True, как только элемент будет замеченболее одного раза это нельзя игнорировать (часть I={0}) или False в противном случае (например, все не игнорируемые элементы уникальны).

0 голосов
/ 25 апреля 2018

Вы можете просто удалить 0 s из списка. Обратите внимание, что во второй строке кода используется понимание списка . Также list - это имя встроенной функции Python, поэтому было бы лучше использовать другое имя для вашего списка.

my_list = [0,4,0]
my_list_no_zero = [value for value in my_list if value != 0] # this uses list comprehension
if len(my_list_no_zero ) == len(set(my_list_no_zero )):
    print('The list does not have duplicates')
else:
    print('The list has duplicates')
...