0

我有一个这样的列表列表:

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

我想知道每个子列表中有多少香蕉。我想获得:

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

我想使用循环和条件以及最少数量的花哨功能来实现这一点。我不想使用 .count,但 .append 就可以了。

我试过这个:

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

但这只是给了我香蕉的总数,而不是每辆购物车的水果清单。

我能做什么?我究竟做错了什么?

4

5 回答 5

1

2级列表理解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)
于 2020-11-15T09:08:54.190 回答
1
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))
于 2020-11-15T09:09:58.590 回答
1

由于您希望使用最少数量的花哨函数来实现这一点,因此我使用 just list.append()and loop 嵌套对其进行了编码。

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]]
于 2020-11-15T10:53:57.977 回答
0
number = [len([j for j in i if j=='banana']) for i in your_list]

解释:

[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

我们创建一个仅包含源列表中每个元素的“香蕉”的列表,然后我们获取这些列表的长度以获得我们想要的结果。

于 2020-11-15T09:14:20.057 回答
-1

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

于 2020-11-15T09:03:36.043 回答