Еще один вопрос Python о any() / all()

#python #python-3.x #boolean-logic #iterable

#python #python-3.x #логическая логика #итерируемый

Вопрос:

Допустим, у меня есть список, содержащий только значения True / False в любом порядке, и длина списка не является фиксированной. Давайте вызовем список myList .

Тогда есть три возможности. Список содержит только истинные значения, список содержит только ложные значения или список содержит сочетание истинных / ложных значений в любом порядке.

Если я сделаю:

 if all(myList):
    print('All True')
elif any(myList):
    print('Mixed values')
else:
    print('All False')
 

Я могу знать общее содержимое списка, все значения True, all False или смешанные значения True / False.

Вопрос в том, есть ли способ узнать, содержит ли список смешанные значения True / False без if elif else теста? Любая встроенная функция, позволяющая напрямую узнать, что у меня есть смешанные значения в списке?

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

1. не могли бы вы поделиться исходными данными, пожалуйста? Мы смотрим на список списков или фрейм данных?

2. По-прежнему неясно, что вы подразумеваете под «это может быть любой длины», но в целом это будет «[True, True] или [True, False] или [False, False]». Итак, вам нужно иметь возможность описать состояние, которое вас интересует, учитывая список любой длины.

3. Это просто список логических значений.

4. @kbr85, сколько логических значений. Может ли это быть [True, True, True, False, True, False, False, True, True] ? Если да, то каков результат?

5. Набрав достаточное количество очков репутации, мы все должны сосредоточиться на том, чтобы писать хорошие вопросы, которые менее неоднозначны. Пожалуйста, сформулируйте вопрос достаточно четко, чтобы каждый мог просмотреть и предоставить решение.

Ответ №1:

Ваш код в основном повторяет список дважды, но одного раза будет достаточно:

 if 0 < sum(myList) < len(myList):
    print('Mixed values')
 

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

1. Список может содержать любое количество элементов. Длина не фиксирована.

2. @juanpa.arrivillaga Я тоже это понял и отредактировал вопрос. Но спасибо 🙂

3. @kbr85: Вы сказали, что у него может быть только 3 возможных состояния, каждое из которых содержит ровно 2 элемента.

4. @kbr85 тогда какое именно условие вы пытаетесь оценить?

5. Это if sum(listState) == 1 также может быть результатом [False,True] , но требование есть [True,False] . Так что только if listState == '[True, False] это имело бы смысл.

Ответ №2:

Вопрос в том, есть ли способ узнать, содержит ли список смешанные значения True / False без теста if elif else? Любая встроенная функция, позволяющая напрямую узнать, что у меня есть смешанные значения в списке?

Для этого вы можете создать лямбда-выражение.

 mixed = lambda x: len(set(x)) > 1
tf = [True, False, False, True]
f = [False, False, False]
t = [True, True, True]

mixed(tf) # returns true
mixed(t)  # returns false
mixed(f)  # returns false.
 

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

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

1. также может означать [False, True]

2. Я знаю, я думал, что это то, чего хотел OP. Я изменил его, чтобы быть более конкретным.

3. я знаю. Я пометил его для закрытия, пока не будет достаточно ясности в вопросе.