пытаясь увидеть, включена ли переменная в список в Django - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь определить, есть ли выбранная страна в списке кортежей, используя следующую команду:

if second_tier.profile.country in COUNTRIES:

если я напечатаю second_tier.profile.country, у меня будет CA и когда я печатаю СТРАНЫ, я получаю:

(('GB', 'United Kingdom'), ('AU', 'Australia'), ('AT', 'Austria'), ('BE', 'Belgium'), ('CA', 'Canada'), ('DK', 'Denmark'), ('FI', 'Finland'), ('FR', 'France'), ('DE', 'Germany'), ('HK', 'Hong Kong'), ('IE', 'Ireland'), ('IT', 'Italy'), ('LU', 'Luxembourg'), ('NL', 'Netherlands'), ('NZ', 'New Zealand'), ('NO', 'Norway'), ('PT', 'Portugal'), ('SG', 'Singapore'), ('ES', 'Spain'), ('SE', 'Sweden'), ('CH', 'Switzerland'), ('US', 'United States'))

Таким образом, оператор if должен возвращать True, однако он возвращается как False.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы в настоящее время ищете строку в кортеже кортежей. Вы должны убедиться, что COUNTRIES это все строки, чтобы сделать эту работу. Вы можете использовать некоторые простые списки для преобразования ваших вложенных кортежей.

Использование распаковки кортежей:

COUNTRIES = [x, _ for x in COUNTRIES]

Использование индексации:

COUNTRIES = [x[0] for x in COUNTRIES]

, который берет первый элемент (страну) из каждого кортежа и помещает их в список.

Тогда вы можете сделать:

if second_tier.profile.country in COUNTRIES:

и он вернется True.

В качестве альтернативы вы можете просто зациклить COUNTRIES и явно указать second_tier.profile.country:

for country, _ in COUNTRIES:
    if second_tier.profile.country == country:
        return True

Вы также можете использовать any() здесь:

any(second_tier.profile.country == x for x, _ in COUNTRIES)

Что возвращает True - это любое совпадение .

Примечание: Поскольку вы просто выполняете простой поиск, вы можете преобразовать COUNTRIES в set , что позволит искать O (1) вместо O ( N) поиск.

Я также использовал _ выше, чтобы отбросить ненужные значения, такие как второй элемент для каждого кортежа.

0 голосов
/ 29 июня 2018

У вас есть кортеж кортежей, затем вам нужно выполнить итерации в СТРАНАХ.

>>> for x in COUNTRIES:
...     if second_tier.profile.country in x:
...         print ("ok")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...