Задать вопрос
vgluhov
@vgluhov
.exe

Как проверить наличие всех элементов в массиве Python?

Допустим, есть массив
student = ["Вася", "Петя", "Ваня", "Света"]

#нужно сделать перекличку. Я реализовал это таким образом:
student = ["Вася", "Петя", "Ваня", "Света"]

if "Вася" and "Петя" and "Ваня" and "Света" in student:    
  
    print ("Все студенты на месте. Начинаем занятие!")
    
else:
    
   print ("Отсутствующие к экзамену допущены не будут")


Как эту строку:
if "Вася" and "Петя" and "Ваня" and "Света" in student:

упростить, без использования And?
  • Вопрос задан
  • 487 просмотров
Подписаться 1 Простой 18 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Решения вопроса 2
@Span4ev
Вам нужно, чтобы условие выполнилось, если все эти люди находятся в массиве (в Python - это список)
Значит у вас уже есть список с этими именами.
Значит вам нужен другой список, на основании которого будет производиться сравнение, верно?
Такой список, который вы будете создавать во время переклички

students = ["Вася", "Петя", "Ваня", "Света"] # Должно быть так
students = ["Петя", "Ваня", "Света"] # А не так или как-то иначе


Списки должны совпасть.

Значит в момент переклички создаёте ещё один список, куда помещаете присутствующих,
иначе какой смысл в перекличке, если не с чем сравнивать.

Поэтому:

all_students = ["Вася", "Петя", "Ваня", "Света"]

current_students = [] # сюда помещаете имена людей в момент переклички

current_students.append('Вася') # добавляете имена в момент переклички в пустой список
current_students.append('Петя')
current_students.append('Ваня')
current_students.append('Света')

if all_students == current_students:
	print ('Все студенты на месте. Начинаем занятие!')
else:
	for name in all_students:
		if name not in current_students:		
			print ('Занятие отменяется из-за отсутствия ' + name.title())

#  Результат: 
# ---> Все студенты на месте. Начинаем занятие!


Если кто-то не пришёл и не попал в список создаваемый во время переклички, то:

all_students = ["Вася", "Петя", "Ваня", "Света"]
current_students = []
current_students.append('Вася')
# current_students.append('Петя') # не явился
current_students.append('Ваня')
current_students.append('Света')

if all_students == current_students:
	print ('Все студенты на месте. Начинаем занятие!')
else:
	for name in all_students:
		if name not in current_students:		
			print ('Занятие отменяется из-за отсутствия ' + name.title())

#  Результат: 
# ---> Занятие отменяется из-за отсутствии Петя!

Ответ написан
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Самый простой вариант: просто сравнить количество присутствующих студентов с общим количеством.
students = ['Вася', 'Петя', 'Ваня', 'Света']
present_students = ['Вася', 'Петя']

if len(students) == len(present_students):
    print('Все студенты на месте. Начинаем занятие!')
else:
    print('Отсутствующие к экзамену допущены не будут')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
Если нужно включение в условие всех имён, то, имхо если только создавать функцию проверки и включать в скрипт или конструировать, чтобы не писать долго руками, выражение условия с проверкой с перечислением имён, а потом запускать его через eval().

student = ["Вася", "Петя", "Ваня", "Света"]
s1=s=['(print (\"Все студенты на месте. Начинаем занятие!\")) if ( "'] +['" and "'.join(student)]+['\" in student) else ( print (\"Отсутствующие к экзамену допущены не будут\"))']     
s2=''.join(s1)
eval(s2)


Если же оригинальный список заранее известен и в нём и проверяемом списке всё по порядку, или они сортируются перед проверкой, то можно просто списки сравнить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽