Python'int'对象不可迭代

zd0*_*zd0 0 python int list min typeerror

我正在编写我的第一个程序之一,并在针对另一个程序进行测试时收到错误.下面是我的程序开头的代码片段,它首先抛出了这个问题:

def stats(list_doc):

    #Minimum
    min_val = min(list_doc)
    int(min_val)

    #Maximum
    max_val = max(list_doc)
    int(max_val)

    #Mean
    total = sum(list_doc)
    length = len(list_doc)
    for nums in [list_doc]:
        mean_val = total / length
        float(mean_val)

    #Median
    sorted(list_doc)
    med_val = sorted(lst)
    lstLen = len(lst)
    index = (lstLen - 1) // 2

    if (lstLen % 2):
        return med_val[index]
    else:
        return (med_val[index] + med_val[index + 1])/2.0

    return min_val, max_val, mean_val, med_val
Run Code Online (Sandbox Code Playgroud)

这就是我正在运行的代码,以实际对数字列表执行该功能.

    list_doc = list(range(51)) # from 0 to 50. an odd number of elements.
    min_val, max_val, mean_val, med_val = stats(list_doc)
    print("Minimum = {0} is of type {1}.".format(min_val, type(min_val)))
    print("Maximum = {0} is of type {1}.".format(max_val, type(max_val)))
    print("Mean = {0:.1f} is of type {1}.".format(mean_val, type(mean_val)))
    print("Median = {0:.1f} is of type {1}.".format(med_val, type(med_val)))
Run Code Online (Sandbox Code Playgroud)

我收到一个TypeError:'int'对象不可迭代.错误文本如下:

    TypeError                                 Traceback (most recent call last)
    <ipython-input-25-6a4f116bc5b5> in <module>()
      1 list_doc = list(range(51)) # from 0 to 50. an odd number of elements.
----> 2 min_val, max_val, mean_val, med_val = stats(list_doc)
      3 print("Minimum = {0} is of type {1}.".format(min_val, type(min_val)))
      4 print("Maximum = {0} is of type {1}.".format(max_val, type(max_val)))
      5 print("Mean = {0:.1f} is of type {1}.".format(mean_val, type(mean_val)))

    TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

我认为列表已经可以迭代了,但是我不太确定从这里开始的方向.

Joh*_*024 7

观察返回值stats:

In [7]: stats(list_doc)
Out[7]: 0
Run Code Online (Sandbox Code Playgroud)

现在,看下一个声明:

min_val, max_val, mean_val, med_val = stats(list_doc)
Run Code Online (Sandbox Code Playgroud)

这会产生错误,因为您要求四个值并仅提供一个值.

如果您打算stats返回四个值,则需要修改它.

建议的stats功能代码

考虑:

def stats(x):
     return min(x), max(x), sum(x)/len(x), sorted(x)[len(x)//2]
Run Code Online (Sandbox Code Playgroud)

修订问题中的代码讨论

考虑:

def stats(list_doc):

    #Minimum
    min_val = min(list_doc)
    int(min_val)
    return min_val

    #Maximum
    max_val = max(list_doc)
    int(max_val)
    return max_val

    #Mean
    total = sum(list_doc)
    length = len(list_doc)
    for nums in [list_doc]:
        mean_val = total / length
        float(mean_val)
        return mean_val

    #Median
    sorted(list_doc)
    med_val = sorted(lst)
    lstLen = len(lst)
    index = (lstLen - 1) // 2

    if (lstLen % 2):
        return med_val[index]
    else:
        return (med_val[index] + med_val[index + 1])/2.0

    return min_val, max_val, mean_val, med_val
Run Code Online (Sandbox Code Playgroud)

当python函数遇到一个return语句时,它返回.因此,在计算最小值后,执行以下语句:

    return min_val
Run Code Online (Sandbox Code Playgroud)

使用该语句,函数执行停止.其后的所有语句都不会被执行.

另外,请考虑以下声明:

int(min_val)
Run Code Online (Sandbox Code Playgroud)

此函数获取值min_val并将其作为整数返回.函数的返回值未分配给任何内容.因此,它被忽略了.值min_val不变.也许,意图是:

min_val = int(min_val)
Run Code Online (Sandbox Code Playgroud)

另外,考虑一下:

sorted(list_doc)
Run Code Online (Sandbox Code Playgroud)

此行返回已排序的列表,但忽略返回值. list_doc保持不变.如果您想要更改list_doc,请使用:

list_doc.sort()
Run Code Online (Sandbox Code Playgroud)