Так скажем, у меня есть список, как это

color = ['blue', 'green', 'red', 'white', 'hurley', 'maladroit']

То, что я хочу сделать здесь, это обнаружить, когда список «цвет» состоит только из элементов, которые не являются цветами, которые являются «херли» и «маладроит».

Так что-то вроде:

#If the list color has at least one color in it (E.g)color = ['blue','white','maladroit']
    print('Nothing to see here')

#If the list only consists of elements that aren't colors 
#(E.g)color = ['hurley','maladroit']
    print("I don't see colors.... I actually legit don't...")
1
Joshua Kim 6 Янв 2017 в 15:40

4 ответа

Лучший ответ

Давайте создадим set доступных цветов

allowed = {'blue', 'green', 'red', 'white'}

Затем проверьте отрицание «хотя бы один элемент списка имеет реальный цвет»

print(not any(c in allowed for c in color))

Дает True для ['hurley', 'maladroit'], False, если в списке есть хотя бы цвет

Должно быть очень быстрым с точки зрения производительности, потому что:

  • он использует set для тестирования
  • это не создает другой временный список
  • он использует встроенную функцию any

РЕДАКТИРОВАТЬ: еще проще и быстрее, используя метод isdisjoint, в то время как мы используем set (спасибо PM 2Ring за предоставленную мне информацию):

print(allowed.isdisjoint(color))
2
Jean-François Fabre 6 Янв 2017 в 12:56

Вдохновленные ответами ранее: Создайте набор разрешенных цветов и проверьте, есть ли какие-либо разрешенные цвета в разнице.

allowed_colors = {'red', 'green', 'blue', 'white'}

color = ['blue', 'green', 'red', 'white', 'hurley', 'maladroit']

color_set = set(color)
if len(color_set - allowed_colors) < len(color_set):
    print('Nothing to see here')
else:
    print("I don't see colors.... I actually legit don't...")

Изменить: Решение не было правильным. Работает как положено сейчас. Хотя isdisjoint является наиболее элегантным решением, если вы знаете теорию множеств, как указал Жан-Франсуа.

2
UpSampler 9 Янв 2017 в 06:16

Вдохновленный соответствующим ответом (https://stackoverflow.com/a/642919/2034487), вы можете использовать { {X0}} метод intersection():

Список, содержащий цвета:

$ approved_colours = set(['blue','green'])
$ list_with_colours = ['blue', 'green', 'red', 'white', 'hurley', 'maladroit']
$ if approved_colours.intersection(list_with_colours):
$     print("There are colours present")
$ else:
$     print("There are no colours present")
> "There are colours present"

Сделайте то же самое без каких-либо цветов:

$ list_without_colours = ['hurley', 'maladroit']
$ if approved_colours.intersection(list_without_colours):
$     print("There are colours present")
$ else:
$     print("There are no colours present")
> "There are no colours present"

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

1
Community 23 Май 2017 в 11:53
color = ['blue', 'green', 'red', 'white', 'hurley', 'maladroit']

Вы можете объединить оба эти

color.count('hurley') 
color.count('maladroit')

Или эти

'hurley' in color
'maladroit' in color
0
Chandan Rai 6 Янв 2017 в 12:59