как подсчитать количество элементов в списке в списке?

#python #python-3.x #list

#python #python-3.x #Список

Вопрос:

Это может быть довольно просто, но моя программа — это просто бронирование билетов в кино:

Мой список (например):

 bookings=[["Sam", 1, "titanic", "morning", "Stit1"],
          ["Bill", 2, "titanic", "evening", "Btit2"],
          ["Kik", 2, "lionking", "afternoon", "Klio2"]] 
  

Я хочу напечатать, сколько людей (например) будут смотреть «Титаник». Как мне это сделать?

Заранее спасибо

Ответ №1:

Попробуйте

 sum(b[2] == 'titanic' for b in bookings)
  

Это создает генератор bookings , а затем суммирует их с «титаником».

Обратите внимание на неявную обработку True и False как 1 и 0 соответственно.

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

1. Я думаю, что ввиду того, что здесь происходит «под капотом», стоило бы еще немного рассказать о том, как это работает, с точки зрения того, как True и False логические значения обрабатываются в целочисленной арифметике.

Ответ №2:

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

 bookings=[["Sam", 1, "titanic", "morning", "Stit1"], ["Bill", 2, "titanic", "evening", "Btit2"], ["Kik", 2, "lionking", "afternoon", "Klio2"]]
count = [item for item in bookings if 'titanic' in item]
print(len(count))
  

Ответ №3:

Вы можете создать словарь с названиями фильмов в качестве ключей, а значением — общее количество. Что-то вроде этого

 
ticket_count = {}
for booking in bookings:
    ticket_count[booking[2]] = ticket_count.get(booking[2], 0)   1
  

Я предполагаю, что название фильма всегда является третьим элементом в списке.

Ответ №4:

Вы можете сделать сумму 1 для каждого соответствующего бронирования.

Только третье поле имеет значение при принятии решения о том, какие заказы включать, поэтому вы должны использовать его (т. Е. booking[2] Здесь ). Если вы просматриваете все элементы без разбора, то в большинстве случаев это может сработать, но вы можете столкнуться с проблемами, если название фильма также появится в другом поле, например, Morning (фильм).

Следующий метод не зависит от выполнения арифметики с использованием логических значений.

 sum(1 for booking in bookings if booking[2] == "titanic")