Почему метод list count() не возвращает 2 из списка, созданного с помощью zip()?

#python #list #count

#python #Список #количество

Вопрос:

Вот мой код. Мой вопрос касается последних двух print утверждений.

 topping = ['pepperoni', 'pineapple', 'cheese', 'sausage', 'olives', 'anchovies', 
           'mushrooms']
prices = [2,6,1,3,2,7,2]

num_pizzas = len(topping)
pizzas = list(zip(prices, topping))

# this makes is sort by price from least to greatest
pizzas.sort()

# this prints the cheapest which is the first in the list
cheapest_pizza = pizzas[0]

# this prints the last thing in the list
priciest_pizza = pizzas[-1]

# this prints the first 3 options
three_cheapest = pizzas[:3]

num_two_dollar_slices = prices.count(2)
#this prints 3 $2 prices
print(num_two_dollar_slices)

# Why does this print 0? I would think that it should print 3 as well
num_of_two = pizzas.count(2)
print(num_of_two)
  

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

1. 2 не является элементом pizzas . count не учитывает элементы элементов.

2. pizzas это список кортежей из 2 элементов. Количество 2 s в этом списке равно нулю, потому что в списке вообще нет целых чисел.

Ответ №1:

Посмотрите на pizzas список, после zip и сортировки он выглядит следующим образом:

[(1, 'cheese'), (2, ' mushrooms'), (2, 'olives'), (2, 'pepperoni'), (3, 'sausage'), (6, 'pineapple'), (7, 'anchovies')]

Каждый объект является кортежем, и вы пытаетесь посчитать целое число.

Вместо этого вы можете посчитать prices список, поскольку он является исходным, или вы можете написать простой цикл, который будет считать число 2:

 counter = 0
for price, topping in pizzas:
    if price == 2:
        counter  = 1
print(counter)
  

Или, конечно, поместите его в функцию для общего решения.

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

1. Спасибо! теперь это имеет смысл! Все еще изучаю python. Def помогает

2. @svlad4560 Я рад, что это помогло 🙂 Убедитесь, что вы отметили его как правильный ответ для людей с подобными проблемами в будущем.