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

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

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

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

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


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

упростить, без использования And?
  • Вопрос задан
  • 344 просмотра
Подписаться 1 Простой 18 комментариев
Решения вопроса 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)


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

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

Похожие вопросы