怎样使用sum()与列表项目?

2024-04-25 19:20:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个程序,打印文件中某些值的平均值。当我使用文件的cropdata.txt文件,其中包含:

Lettuce 1 2 3 
Tomato 6 5 1 

我得到以下错误:

    line_mean = (sum(line_parts[1:])/len(line_parts))
TypeError: unsupported operand type(s) for +: 'int' and 'str' 

我不太清楚这是为什么,因为我认为我已经把选定的元素转换成整数了。你知道吗

我的代码:

file = ('cropdata.txt')
with open(file, 'r') as file_numsort_1:
    for line in file_numsort_1:
        line = (line.rstrip(" \n"))
        line_parts = line.split(' ')
        for num in line_parts[1:]:
            num=int(num)
        line_mean = (sum(line_parts[1:])/len(line_parts))
        print(line_mean) 

Tags: 文件in程序txtforlenlinemean
3条回答

你的代码

for num in line_parts[1:]:
    num=int(num)

实际上并没有做任何事情,因为变量num在循环的每次迭代中都会被覆盖。因此,没有任何数据从str转换为int类型,这是导致错误的原因。您要做的是创建一个数字列表,如下所示:

file = ('cropdata.txt')
with open(file, 'r') as file_numsort_1:
    for line in file_numsort_1:
        line = (line.rstrip(" \n"))
        line_parts = line.split(' ')

        num_list = []
        for num in line_parts[1:]:
            num_list.append(int(num))

        line_mean = sum(num_list)/float(len(num_list))

需要注意的其他事项:

  • 使用line.split(' ')有点多余,因为line.split()会自动分割空白分隔符。它还将连续的空格计算为一个delimeter
  • line = line.rstrip()中不需要参数,当然也不需要括号
  • 我在line_mean计算中添加了一个float()函数。在Python2中,对两个整数的操作保持为整数(因此5/3=1,而不是1.66)。 我相信python3也有类似的行为,但是这个额外的函数不会有什么坏处(感谢Bharel的澄清),这个float函数在python3中是不需要的

像这样转换时num=int(num),您没有将转换保存回列表中。
尝试这样转换:

line_parts = [int(x) for x in line_parts[1:]]

然后这样求和:

line_mean = (sum(line_parts)/len(line_parts))

或者,您可以使用statistics模块,而不是自己求和。你知道吗


优化版本:

import statistics

file = ('cropdata.txt')
with open(file, 'r') as file_numsort_1:
    for line in file_numsort_1:
        # Strip, split, and convert to int
        line_ints = map(int, line.rstrip().split()[1:])

        # Print the mean
        print(statistics.mean(line_ints)) 

你的问题不在于sum,而在于“数字”列表,这应该可以解决你的问题:

line_parts = line.split(' ')
list_of_nums = [int(item) for item in line_parts[1:]]
line_mean = (sum(list_of_nums)/len(C))
print(line_mean) 

相关问题 更多 >