【问题标题】:Average -Python平均-Python
【发布时间】:2017-07-19 14:45:32
【问题描述】:

我正在尝试查找范围内数字的平均值(即查找范围 1-1000 中所有数字的平均值)。我编写了以下代码来执行此操作,但是由于if-statement,在运行时,代码会产生多个数字。然后我尝试使用while-loop,但是当我输入break 语句时,它产生了与if-statement 相同的list。有什么方法可以使用if-statement 并获得 1 个平均值?谢谢!

mylist =[]
def ave_data(x, y):
    for line in filename:    
        for number in line.split():
            if int(number) > x and int(number) < y:
                mylist.append(int(number)) 
                print(sum(mylist)/len(mylist))

【问题讨论】:

  • 只需取消缩进打印 3 lvls 就可以了
  • 您的print 语句在循环中,因此每次都会执行。只需将其移出 for 循环,以便在填充 mylist 后完成一次。
  • @Ev.Kounis 感谢您的帮助!
  • @SteveFrancisco 感谢您的帮助!

标签: python list file average


【解决方案1】:

它是 not 由于 if 语句。您只需将print(..) 放在if 中的for 循环中。通过将其移到外部 for 之外,它将打印整个文件的平均值:

def ave_data(x, y):
    mylist = []  # move inside
    for line in filename:    
        for number in line.split():
            if int(number) > x and int(number) < y:
                mylist.append(int(number)) 
    print(sum(mylist)/len(mylist))  # for the entire file.

您还可以将mylist 变量更好地移入函数中。否则它是一个全局变量,其他函数可以改变它。此外,第二次运行将取两个文件的平均值。

话虽如此,你把事情弄得太复杂了。您可以简单地使用:

def ave_data(x, y):
    mylist = [int(number) for line in filename for number in line.split()
                          if x < int(number) < y]
    print(sum(mylist)/len(mylist))  # for the entire file.

【讨论】:

  • 哇,我不敢相信我错过了。谢谢!
【解决方案2】:

您也可以使用list-comprenehsion 代替for-loop,如下所示:

mylist = [int(num) for line in filename for num in line.split() if y > int(num) > x]
print sum(mylist) / len(mylist)

您还可以添加一个条件来检查list是否为空:

print sum(mylist) / len(mylist) if mylist else 'No numbers in that range'

【讨论】:

  • 感谢您的帮助!
  • 很高兴为您提供帮助 :-)
【解决方案3】:

您看到多个数字,因为您的打印语句在您的 for 循环中。看看这个伪代码:

create an empty list
open the file
for each line in the file
    for each number in the line
        if the number is within the range
            add the number to the list
            compute the average of the list of numbers

您会看到,每次找到所需范围内的数字时,您都在计算平均值。相反,您要做的是首先(在 for 循环内)收集所有数字,然后(在 for 循环外)计算平均值:

create an empty list
open the file
for each line in the file
    for each number in the line
        if the number is within the range
            add the number to the list
compute the average of the list of numbers

这是通过以下代码实现的:

def ave_data(x, y):
    nums = []
    for line in filename:    
        for number in line.split():
            if int(number) > x and int(number) < y:
                nums.append(int(number)) 
    print(sum(mylist)/len(mylist))

这里有一个更好的方法来做同样的事情:

def ave_data(x,y):
    total = 0
    nums = 0
    with open('path/to/file') as infile:
        for line in infile:
            for num in line.split():
                num = int(num)
                if not (x < num < y): continue
                total += num
                nums += 1

    if not nums:
        print("There were no numbers within the required range")
        return

    print("The average is", total/nums)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多