Как я могу проверить, есть ли дубликат списка в списке списков? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть список РЕЗУЛЬТАТ, который содержит списки. Я хочу добавить список в РЕЗУЛЬТАТ, только если он не существует.

Итак

input = [1,2,3]
RESULT = [[5,6], [4,5,8]]

Теперь RESULT.append(input), что дает

RESULT = [[5,6], [4,5,8], [1,2,3]]

Теперь, если я попытаюсь append [5,6], он не должен быть добавлен, поскольку он уже там.

Я не могу использовать set здесь, так какова альтернатива?

Ответы [ 4 ]

3 голосов
/ 24 апреля 2019
def add(data_, value):
    if value not in data_:
        data_.append(value)

data = [[5, 6], [4, 5, 8]]
print(data)  # [[5, 6], [4, 5, 8]]
add(data, [1, 2, 3])
print(data)  # {(5, 6), (4, 5, 8), (1, 2, 3)}
add(data, [5, 6])
print(data)  # {(5, 6), (4, 5, 8), (1, 2, 3)}
2 голосов
/ 24 апреля 2019

Вы можете использовать itertools.groupby():

no_dupes = list(ls for ls, _ in itertools.groupby(ls))

Тогда проверьте это:

if ls == no_dupes:
     # Do x
1 голос
/ 24 апреля 2019

Простейшим решением может быть использование оператора if для первой проверки, если [5,6] еще не в RESULT, а если нет, append, в противном случае продолжить, возможно, сообщить пользователю, что оно былодубликат и не добавляется:

myinput = [1,2,3]
RESULT = [[5,6], [4,5,8]]

RESULT.append(myinput)

l = [5,6]

if l not in RESULT:
    RESULT.append(l)
else:
    # Do something with RESULT 
    pass # or
    # print('Duplicate not appended')
    print(f'RESULT: {RESULT}')
    raise(Exception(f'{l} is a duplicate and thus was not appended'))

вывод:

RESULT: [[5, 6], [4, 5, 8], [1, 2, 3]]
Traceback (most recent call last):
  File "main.py", line 15, in <module>
    raise(Exception(f'{l} is a duplicate and thus was not appended'))
Exception: [5, 6] is a duplicate and thus was not appended
0 голосов
/ 24 апреля 2019
input = [1,2,3]
RESULT = [[5,6], [4,5,8]]

предположим, после добавления RESULT.append(input)

RESULT=[[5,6], [4,5,8], [1,2,3]]

Основная идея для этого конкретного кода:

Для проверки:

i=0    
count=0
while i<3:
  if input == RESULT[i]:
     count=count+1
  i = i + 1
if count==0:
    RESULT.append(input)
print(RESULT)
...