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?
5 Réponses :
len([cart for cart in carts if 'banana' in cart])
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)
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))
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)
[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
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.
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]]
[len(l) for l in list]
? (il vaut mieux avoir un nom différent de lalist
)."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!