Как узнать, содержит ли список кортежей конкретный кортеж, зная значения этого кортежа? - PullRequest
0 голосов
/ 05 апреля 2019

Я довольно новичок в python, и поэтому, хотя я пытаюсь найти решение этой проблемы с незапамятных времен, я не могу!У меня есть список кортежей с именем list_of_tuples , а затем еще один список кортежей, который называется finalTuple и к которому я добавил два кортежа.Что я хочу сделать, так это прочитать все кортежи из списка list_of_tuples и выяснить, есть ли уже идентичный кортеж в списке.Если он есть, я хочу напечатать в консоли сообщение, которое указывает, что в противном случае просто добавьте кортеж в finalTuple.Может ли кто-нибудь помочь мне с этим?Я пробовал следующий код, но он не работает:

list_of_tuples = [ ("a","b","c"),
    ("a","b","c"),
    ("a","b","d"),
     ("a","b","d"),
    ("i","k","l")
]

first_tuple = ("a","b","c")
second_tuple= ("a","b","d")
finalTuple = []
finalTuple.append(first_tuple)
finalTuple.append(second_tuple)

for i in range(len(list_of_tuples)):
   # print(listtt[i])
    if not(any((list_of_tuples[i]) in j for j in finalTuple)) :
       key_value = []
       key_value.append(list_of_tuples[i])
       finalTuple.append(tuple(key_value))
       print("The tuple is appended to the list")
    if (any((list_of_tuples[i]) in j for j in finalTuple)) :
       print("The value already exists")

Вывод, который я получаю на консоли:

PS C:\Users\andri\PythonProjects\mypyth> py test.py
The tuple is appended to the list
The value already exists
The value already exists
The tuple is appended to the list
The value already exists
The value already exists
The tuple is appended to the list
The value already exists

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Ваш блок if, который проверяет, существует ли уже значение, имеет место после блока if, который проверяет, не существует ли он, добавляет значение в список, так что первый всегда равен True, так как значение будет быть добавлен в список, даже если это не так. Вместо этого вы должны использовать блок else для противоположного условия. Кроме того, чтобы проверить, существует ли кортеж в списке кортежей, вы можете просто использовать вместо него оператор in:

for i in range(len(list_of_tuples)):
   if list_of_tuples[i] in finalTuple:
       print("The value already exists")
   else:
       finalTuple.append(list_of_tuples[i])
       print("The tuple is appended to the list")
0 голосов
/ 05 апреля 2019
lot = [("a","b","c"),
    ("a","b","c"),
    ("a","b","d"),
     ("a","b","d"),
    ("i","k","l")]

ft = [("a","b","c"),("a","b","d")]

Используйте in или not in для тестирования членства .

>>> for thing in lot:
...     if thing in ft:
...         print(f'{thing} in ft')
...     else:
...         ft.append(thing)


('a', 'b', 'c') in ft
('a', 'b', 'c') in ft
('a', 'b', 'd') in ft
('a', 'b', 'd') in ft
>>> ft
[('a', 'b', 'c'), ('a', 'b', 'd'), ('i', 'k', 'l')]
>>> 

или используйте наборы для тестирования членства .

>>> set(lot).difference(ft)
{('i', 'k', 'l')}
>>> ft.extend(set(lot).difference(ft))
>>> ft
[('a', 'b', 'c'), ('a', 'b', 'd'), ('i', 'k', 'l')]
>>>
...