问题是在不使用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
答案 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)
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()
,lambda
和list 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]