计算列表中的元素

时间:2013-05-30 02:29:20

标签: python list

问题是在不使用len(list)的情况下计算列表中的元素。

我的代码:

def countFruits(crops):
  count = 0
  for fruit in crops:
    count = count + fruit
  return count

错误是:'int'和'str'

这些应该是应该运行该程序的测试用例。

crops = ['apple', 'apple', 'orange', 'strawberry', 'banana','strawberry', 'apple']
count = countFruits(crops)
print count
7

6 个答案:

答案 0 :(得分:1)

试试这个:

def countFruits(crops):
  count = 0
  for fruit in crops:
    count = count + 1
  return count

要计算列表的长度,您只需将1添加到找到的每个元素的计数器,忽略fruit。或者,您可以使用以下内容编写行:

count += 1

由于我们实际上并未使用fruit,因此我们可以像这样编写for

for _ in crops:

进行两次修改,这是实现的最终版本:

def countFruits(crops):
    count = 0
    for _ in crops:
        count += 1
    return count

答案 1 :(得分:1)

你需要简单的替换错误的表达式:count = count + fruit

def countFruits(crops):
  count = 0
  for fruit in crops:
    count += 1
  return count

表示x中的y,得到x如何从列表y中获取对象,得到数字,你可以使用函数枚举(crop),返回对象和数字。  其他使用方式:

countFruits = lambda x: x.index(x[-1])+1

但最好的方法是使用len()你可以辞职:

countFruits = len

答案 2 :(得分:1)

使用RecursionTernary operator

def count_elements(list_):
    return 1 + count_elements(list_[1:]) if list_ else 0

print(count_elements(['apple', 'apple', 'orange', 'strawberry']))

输出:

4

答案 3 :(得分:1)

def count(x):
    return sum(1 for _ in x)

以上是相当有效的;在获取总和之前,理解不会扩展到内存中,而是为生成的每个元素累积。也就是说:sum([1 for _ in x])会更糟糕。

无法想象为什么你不想使用len() ...我能想象的唯一原因是如果iterable是一个生成器并且你不想吃元素,在这种情况下只需在循环中添加一个计数器(通过enumerate使其干净,但可能有点隐藏。

for i, item in enumerate(my_generator):
     do_stuff(item)

print 'Did things to {} items'.format(i)

答案 4 :(得分:0)

由于禁止使用len(),我认为你给出的任务的真正含义是在python中学习不同的技巧。

使用高阶函数与reduce()lambdalist comprehensions的解决方案 - 所以基本上大多数python好东西......

def countFruits(crops):
    return reduce(lambda x, y: x+y, [1 for _ in crops])

crops = ['apple','orange', 'banana'] 
print countFruits(crops)

答案 5 :(得分:0)

def countFruits(crops):
    return max(enumerate(crops, 1))[0]