0
votes

Python: Comment puis-je compter des nombres spécifiques d'une liste de listes sans utiliser .count?

J'ai une liste de listes comme celle-ci:

number = []
for cart in list:
    for fruit in range (0,len(cart)):
        if cart[fruit] == "banana":
            number.append("banana")
print(len(number))

Je veux savoir combien de bananes ai-je dans chaque sous-liste. Je souhaite obtenir:

number = [1],[2],[2]

Je voudrais y parvenir en utilisant des boucles et des conditions et le nombre minimum de fonctions sophistiquées. Je ne veux pas utiliser .count, mais .append conviendrait.

J'ai essayé ceci:

list = [["apple", "apple","bananas"], ["bananas, "apple", "bananas"], ["bananas","bananas","pear"]]

Mais cela ne me donne que le nombre total de bananes, pas une liste de fruits par chariot.

"Que pouvais-je faire?" Qu'est-ce que je fais mal?


6 commentaires

[len(l) for l in list] ? (il vaut mieux avoir un nom différent de la list ).


"Je ne veux pas utiliser .count, mais .append serait ok." Quelle est la raison de cette restriction? Est-ce un projet d'apprentissage personnel ou un exercice? Avez - vous réellement utiliser append ?


Pouvez-vous vous assurer de modifier votre question afin que le code soit correct et cohérent? La définition de la list a une erreur de syntaxe, et l'exemple de code renverra 0 au lieu du nombre total - il teste pour "banana" mais le panier ne contient que "bananas" .


pourquoi voudriez-vous obtenir ceci: [1],[2],[2] ? Cela semble assez inutile, que diriez-vous de [1, 2, 2,] `?


Quelque chose comme *number, = map(lambda cart: sum(map("bananas".__eq__, cart)), list) serait-il suffisant pour vos besoins?


"Quelle est la raison de cette restriction?" La raison en est que j'essaie d'apprendre à utiliser les boucles pour compter. "Devez-vous réellement utiliser append?" Non, pas besoin!


5 Réponses :


-1
votes

len([cart for cart in carts if 'banana' in cart])


0 commentaires

1
votes

Compréhension de liste à 2 niveaux avec sum()

mylist = [["apple", "apple","bananas"], ["bananas", "apple", "bananas"], ["bananas","bananas","pear"]]
number = [[sum([1 if 'banana' in y else 0 for y in x])] for x in mylist]
print(number)


0 commentaires

1
votes
number = []
for c in range(len(carts)):
    n = 0
    for fruit in carts[c]:
        if fruit == "banana":
            n += 1
    number.append(n)

print(sum(number))

1 commentaires

ne pas faire for c in range(len(carts)) . Il suffit de * parcourir la liste directement: for cart in carts: for fruit in cart: ... Mais sinon, je pense que c'est plus proche de l'esprit de la question. Aussi je ne pense pas que l'op veut la sum(number)



0
votes
[j for j in i if j=='banana'] # will result a list of only "banana"s from list "i" which is one element of source list

1 commentaires

Bien que ce bloc de code puisse répondre à la question, il serait préférable que vous fournissiez une petite explication pour expliquer pourquoi il le fait.



1
votes

Puisque vous souhaitez réaliser cela en utilisant un nombre minimum de fonctions sophistiquées, je l'ai codé avec juste list.append() et l'imbrication de boucles.

carts = [["apple", "apple", "bananas"], ["bananas", "apple", "bananas"], ["bananas","bananas","pear"]]

banana_counts = []

for cart in carts:  
  count = 0
  for fruit in cart: # Using range() here is not Pythonic
    if fruit == 'bananas':
      count += 1
  banana_counts.append([count])

print(banana_counts) #[[1], [2], [2]]


0 commentaires