1

问题是在不使用 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
4

6 回答 6

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
于 2013-05-30T02:44:29.053 回答
1

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

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

x in y 的表达式,从列表 y 中获取 x 如何对象,要获取数字,您可以使用函数 enumerate(crops),返回对象和数字。其他使用方式:

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

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

countFruits = len
于 2013-05-30T02:46:47.010 回答
1

使用递归三元运算符

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

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

输出:

4
于 2013-05-30T02:47:35.250 回答
1
def count(x):
    return sum(1 for _ in x)

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

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

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

print 'Did things to {} items'.format(i)
于 2013-05-30T03:05:23.633 回答
0

由于len()禁止使用,我假设您所接受任务的真正含义是在 python 中学习不同的技术。

一个使用高阶函数和列表推导的解决方案reduce()——所以lambda基本上大多数 python 好东西......</p>

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

crops = ['apple','orange', 'banana'] 
print countFruits(crops)
于 2013-05-30T03:08:01.767 回答
0
def countFruits(crops):
    return max(enumerate(crops, 1))[0]
于 2013-05-30T03:49:41.507 回答