Von Aschr 2022-01-10 11:49 采纳率: 100%
浏览 32
已结题

运行aver=sum(x)/len(x)一直报错TypeError,x是个列表,如何解决?(语言-python)

目的是输入一个列表x后,如果x中全为数字,则输出大于其平均值的数的平方,如果不全是数字就输出列表中长度大于2的元素

问题相关代码
class mf:
    def myaver(x):
        y =[]
        aver = sum(x)/len(x)
        for i in x:
            if i >= aver:
                y.append(i)
        x = y        
            


    def is_number(x):
        try:
            float(x)
            return True
        except ValueError:
            pass
        try:
            import unicodedata
            unicodedata.numeric(s)
            return True
        except (TypeError,ValueError):
            pass
        return False


def af(x):
    '''
    x is a list
    '''
    flag = True
    for i in x:
        if mf.is_number(i) == True:
            pass
        else:
            flag = False
    if flag == True:
        y = list(filter(mf.myaver,x))
        z = list(map(y**2,y))
        print(z)
    else:
        print(list(filter(lambda i:len(i)>=2,x)))
运行结果及报错内容
aver = sum(x)/len(x)
TypeError: 'int' object is not iterable
  • 写回答

1条回答 默认 最新

  • user-from-future 2022-01-10 12:44
    关注
    class mf:
        def myaver(x):
        def is_number(x):
    

    你开头定义了类建议加上@staticmethod静态方法装饰器。
    然后你 myaver(x) 这个函数传入值 x 是一个 int 类型的,sum()只能接受一个可迭代对象,而 int 不属于可迭代对象,所以你要看看你代码逻辑哪里有问题~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月18日
  • 已采纳回答 1月10日
  • 创建了问题 1月10日

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制