2015-03-01 5 views

ответ

4

Преобразование списка в наборе и сравнить его как этот

>>> set(["NULL", "NULL"]) == {"NULL"} 
True 
>>> set(["NULL", "NULL", 1]) == {"NULL"} 
False 

При преобразовании списка в set, все дубликаты удаляются, и только уникальные значения сохраняются. Теперь вы можете сравнить его с другим набором только с NULL. Оба они равны, тогда ваш фактический список имеет только NULL s.

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


Alternate и идиоматический, путь будет использовать all функции (или ее функцию сестры any)

>>> all(item == "NULL" for item in ["NULL", "NULL", 1]) 
False 
>>> all(item == "NULL" for item in ["NULL", "NULL"]) 
True 

Здесь, если не NULL значения находится где-то в середине, то all будет немедленно верните False, и вам не нужно проверять весь список. Точно так же, any может быть использован с not как этот

>>> not any(item != "NULL" for item in ["NULL", "NULL", 1]) 
False 
>>> not any(item != "NULL" for item in ["NULL", "NULL"]) 
True 
+0

да, набор будет работать. проголосовали. –

+0

(Конечно, это также проверяет все элементы в списке, используя неявный цикл) –

+0

@Tim: Но неявный цикл и явный цикл аналогично эффективны? – Tim

Смежные вопросы