Проверьте, существует ли элемент в списке

#python #postgresql

Вопрос:

У меня есть список UUID (список блокировок), и я хочу проверить, указан ли в этом списке один конкретный UUID.

 list(block_list)

Out[41]: 
[ ('f779e98c-a541-4ae2-afcb-b0da2e5bee24',),
 ('a005bc7b-c06d-48bf-8259-757d52c70330',),
 ('8af278b1-089e-40e9-a57d-856efe336c26',)]
 

Почему это дает мне ложное представление?

«8af278b1-089e-40e9-a57d-856efe336c26» в списке блокировки Ответ: Ложь

Спасибо, Роберт

Комментарии:

1. Поскольку у вас нет идентификаторов UUID в списке, у вас есть идентификаторы UUID в кортежах в списке: SQL-запросы всегда возвращают кортежи, даже при извлечении одного значения.

2. ('8af278b1-089e-40e9-a57d-856efe336c26',) in [ ('f779e98c-a541-4ae2-afcb-b0da2e5bee24',), ('a005bc7b-c06d-48bf-8259-757d52c70330',), ('8af278b1-089e-40e9-a57d-856efe336c26',)]

Ответ №1:

Потому что ‘8af278b1-089e-40e9-a57d-856efe336c26’ — это строка, но ваш список состоит из кортежей

Ответ №2:

Причина, по которой он является ложным, заключается в том, что вы проверяете, есть ли строка в списке. Но ваш список-это список кортежей. Поэтому вы должны проверить, есть ли какой-либо конкретный кортеж в списке.

Поэтому вместо этого вам нужны следующие коды:

 ('8af278b1-089e-40e9-a57d-856efe336c26') in block_list
 

Теперь вывод будет верным

Ответ №3:

Вы должны передать строку внутри кортежа, не передавайте необработанную строку, чтобы увидеть, есть ли она в списке. Вот простая функция, которая может сделать это за вас, передав необработанную строку и вложив ее в кортеж с конечной запятой:

 def check_string(string):
    if ((string, ) in my_list):
        return True
    else:
        return False