#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