Как проверить общее количество раз, когда определенное значение возникало во вложенном цикле?

#python-3.x

Вопрос:

Вопрос: Подсчитайте общее количество яблок, купленных только в понедельник и в субботу.

В настоящее время это мой код:

 apple = 0
banana = 0
orange = 0

#number of fruits bought on monday, tuesday and wendsday respectively
fruit = [ ['apple', 'cherry', 'apple', 'orange'], 
          ['orange', 'apple', 'apple', 'banana'], 
          ['banana', 'apple', 'cherry', 'orange'] ]

for x in fruit:
     if 'apple' in x:
          if fruit.index(x) == 0 or fruit.index(x) == 2:
               apple   1

print(apple)
 

По какой-то причине текущий результат, который я получаю для печати apple , таков 0 .

Что не так с моим кодом?

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

1. apple 1 должно быть apple = 1

Ответ №1:

проблема в вашем коде заключается в том, что вы только увеличиваете количество яблок, но не присваиваете их какой-либо переменной, поэтому она печатает свое начальное значение:

 apple = 0
apple   1
 

вам нужно сделать:

 apple  = 1
 

а также fruit.index(x) всегда возвращает индекс первого появления этого элемента, то есть:

 fruit[1].index('apple')
 

вернет индекс первого появления «яблока» во фруктах[1], равный 1.

но, согласно вашему вопросу, это решение неверно, потому что они не просили яблок только в понедельник и среду, поэтому вам нужно сделать это вручную, потому что, согласно вашему решению, оно также будет считать яблоки во вторник, где индекс «яблоко» равен 0 или 2. ниже приведено правильное решение

 apple = 0
banana = 0
orange = 0

#number of fruits bought on monday, tuesday and wendsday respectively
fruit = [ ['apple', 'cherry', 'apple', 'orange'],
          ['orange', 'apple', 'apple', 'banana'],
          ['banana', 'apple', 'cherry', 'orange'] ]


apple  = fruit[0].count('apple')
apple  = fruit[2].count('apple')

print(apple)
 

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

1. а ну понятно. Спасибо!

2. всегда помните, что index() вернет индекс первого появления. В основном эту ошибку совершают программисты

3. спасибо за совет. Я искренне этого не знал; ха-ха-ха :П

Ответ №2:

В вашем коде есть две проблемы.

Первый вопрос заключается в:

 if fruit.index(x) == 0 or fruit.index(x) == 2:
     apple   1
 

apple 1 не делает ничего осмысленного. Если вы хотите , чтобы вам нужно было увеличить apple , вам нужно это сделать apple = 1 . Это приводит к apple тому, что 2

Вторая проблема заключается в том, что вам нужно рассчитать общее количество, которое является 3 яблоками и нет 2 . Два яблока были куплены в понедельник и 1 в среду.

Вы можете использовать collections.Counter для этого

 from collections import Counter
for x in fruit:
    if 'apple' in x:
        if fruit.index(x) == 0 or fruit.index(x) == 2:
            apple  = Counter(x)['apple']
 

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

1. Большое вам спасибо!

Ответ №3:

так и должно быть apple = 1 , а не apple 1