【问题标题】:Python: operand error when I try to run functions for finding the sum and meanPython:当我尝试运行查找总和和均值的函数时出现操作数错误
【发布时间】:2017-07-11 11:56:30
【问题描述】:

我是一名 Python 初学者,我有一项任务需要创建自己的函数来查找列表的总和和均值。我尝试制作以下公式:

import math

list1 = ['ABC123', 0.00095, 0.00081, 0.0023, 0.00209, 0.0017, 0.00215, 0.00167, 0.00164, 0.00206, 0.00233, 0.00239, 0.00242, 0.0023, 9e-05, 0.00177, 0.001]

def samplesum(my_list):
    '''Finds the sum of a list'''
    total_sum = 0
    for element in my_list:
        total_sum += element
    return total_sum


def samplemean(my_list):
    """Finds the mean of a list"""
    sum_of_num = sum(my_list)
    list_mean = sum_of_num / len(my_list)
    return list_mean

samplesum(list1)
samplemean(list1)

当我运行脚本时,我收到以下错误消息:

File "Task.py", line 136, in <module>
    samplesum(list1)
File "Task.py", line 120, in samplesum
    total_sum += element
TypeError: unsupported operand type(s) for +: 'int' and 'str'

或者,如果我使用 #samplesum(my_list) 函数静音,我将收到 samplemean(my_list) 的此错误

File "Task.py", line 137, in <module>
    samplemean(list1)
File "Task.py", line 125, in samplemean
    sum_of_num = sum(my_list)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

我做错了什么?

更新:正如几位 cmets 指出的那样,除了整数之外,我在该列表中还有一个字符串。我通过重新定义不带字符串的列表来删除它,但我认为这被认为是硬编码,并且分配指令不允许硬编码。如何使用这些公式让 Python 忽略列表中的字符串?

【问题讨论】:

  • 看起来list1 至少有一个元素是字符串。 list1是如何创建的?
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。具体来说,您发布的代码不会重现该问题,因为您的代码在第一个可执行行上就死了。
  • @biocoder 可以发一下list1的内容吗?
  • @Lucas 哦,这就是问题所在!我忘记了我在 list1 中插入了一个字符串标题。谢谢,我会更新我的问题
  • 'ABC123' 不是数字。删除它,你的代码就可以工作了。

标签: python list loops sum typeerror


【解决方案1】:

考虑到更新后的问题,您可以将问题视为:

  • 忽略字符串
  • 只考虑数字

这将是两个选项:

# only consider numbers
list1 = [x for x in list1 if isinstance(x, (int, float, long))]

# ignore strings
list1 = [x for x in list1 if not isinstance(x, basestring)]

【讨论】:

    【解决方案2】:

    更新:

    根据您的问题更新,您可以通过以下方式实现:

    >>> mylist = [1,2,3,"4", "str"]
    >>> [int(x) for x in mylist if str(x).isdigit()]  ------> ONE
    [1, 2, 3, 4]
    >>> [int(x) for x in mylist if isinstance(x, int) ]    ------>TWO
    [1, 2, 3]
    

    例如一个: 删除字符串str,但保留数字字符串"4"并将其转换为整数4。

    例如二:只保留所有整数

    原文:

    Python不支持数字字符串和整数之间的加法,你必须将所有数字字符串转换成整数然后相加

    mylist 的所有元素转换为 int:

    mylist = [int(v) for v in mylist]
    

    或者您可以在将list1 传递给您的samplesum()samplemean 之前将它们全部转换

    list1 = [int(v) for v in list1]
    

    然后

    for element in mylist:
        total_sum += element
    

    【讨论】:

    • 原来我在那个列表中有一个字符串。我通过重新定义没有它的列表来删除它,但我认为这被认为是硬编码,并且分配说明不鼓励硬编码。您是在向我展示使 Python 忽略列表中的字符串的方法吗?或者你会怎么做?
    • 我以为你的列表中有数字字符串。例如"1" +1 会抛出类型错误。这就是为什么我提到将numerical string 转换为整数而不是将字符串转换为整数的原因。很高兴您解决了问题
    • 请查看我更新的问题以查看我正在使用的列表。你知道如何让函数跳过字符串,这样我就不必重新定义列表了吗?
    猜你喜欢
    • 2018-09-21
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多