首页 > 解决方案 > 如何使用群比?使用 groupby 通过从函数获取输入来查找奇数或偶数

问题描述

下面是我的任务

  1. 定义一个函数 even_or_odd,它接受一个整数作为输入,如果给定的数字分别是偶数和奇数,则返回字符串偶数和奇数。
  2. 根据上述定义的函数,将列表 n = [10, 14, 16, 22, 9, 3 , 37] 的数量分为两组,即偶数和奇数。提示:使用 itertools 模块的 groupby 方法。
  3. 遍历获得的 groupby 对象并打印它的组名和与组关联的元素列表。

我写了下面的代码:我收到错误'str' object is not callable。实际上,我不确定如何通过从函数中获取值来使用 itertool groupby()。有人可以指导我吗?

from itertools import groupby

def even_or_odd(r):
    for i in r:
        if i%2 == 0:
            return "even"
        else:
            return "odd"


n = [10, 14, 16, 22, 9, 3 , 37]


for key, group in groupby(n, even_or_odd(n)):
    if key == even:
        print(key, list(group))
    else:
        print(key, list(group))

标签: pythonitertools

解决方案


这里根据文档https://docs.python.org/3.8/library/itertools.html#itertools.groupby的解决方案

The key is a function computing a key value for each element

from itertools import groupby

n = [10, 14, 16, 22, 9, 3 , 37]

def even_or_odd(val):
     if val%2 == 0:
       return "even"
     else:  
       return "odd"


for key, group in groupby(n, even_or_odd):
    print(key, list(group)) 

输出 :

even [10, 14, 16, 22]
odd [9, 3, 37]




推荐阅读