【问题标题】:Can't return the list I want [duplicate]无法返回我想要的列表[重复]
【发布时间】:2016-02-22 04:01:59
【问题描述】:

我有一段代码可以正常工作,但我不想一个接一个地打印结果,而是想将它们附加到一个列表并返回该列表。我尝试了所有我能想到的方法,但都失败了。请帮忙。

def calc_averages():

    allprices = [ ['','','', '' ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '',''],\
              ['','','' ,1.2 ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '', ''],\
              ['','','' ,1.2, '' ,1.8 ,1.3 ,1.1 , '', '', '', ''],\
              ['','','', '' ,1.0 ,2.0 ,1.2 ,1.2 , '', '', '', ''],\
              ['','','', '' ,1.0 ,2.0 ,1.1 ,1.2 ,1.4 ,1.8 ,1.9 ,2.2] ]

    averages = []
    for lst in range(0,12):
        counter = 0
        total = 0
        for item in allprices:
            if item[lst] != '':
                total = total + item[lst]
                counter = counter + 1
        if counter == 0:
            print('')
        else:
            print(total/counter)

我想在将值附加到其中后返回平均值列表,但返回为空列表。

【问题讨论】:

  • 您应该确保代码中的缩进是正确的,否则无法调试。
  • 它实际上并没有返回任何东西。您需要显式返回一个值。否则返回None
  • “我想尽了一切办法”?你说你想将它们附加到一个列表并返回它——你是否尝试过附加到一个列表并返回它?我没有在您的函数中看到任何附加或返回...
  • 我知道我以前见过这个:stackoverflow.com/questions/35539493/…
  • 它不会返回一个空列表;它返回None。这个问题和你之前的问题有什么不同,为什么你接受的答案不起作用?

标签: python python-3.x


【解决方案1】:

您根本没有附加到平均值或返回它

def calc_averages():

    allprices = [['','','', '' ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '',''],
              ['','','' ,1.2 ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '', ''],
              ['','','' ,1.2, '' ,1.8 ,1.3 ,1.1 , '', '', '', ''],
              ['','','', '' ,1.0 ,2.0 ,1.2 ,1.2 , '', '', '', ''],
              ['','','', '' ,1.0 ,2.0 ,1.1 ,1.2 ,1.4 ,1.8 ,1.9 ,2.2]]


    averages = []
    for outer in allprices:
        counter = 0
        total = 0
        for item in outer:
            if item != '':
                total += item
                counter += 1
        if counter == 0:
            print('')
        else:
            averages.append(total/counter)
    return averages

print(calc_averages())

输出

[1.3199999999999998, 1.3, 1.35, 1.35, 1.5750000000000002]

【讨论】:

  • 它只返回了平均列表中的一项。应该有 9 个。
  • 你的平均计算不正确,你也不需要迭代range(0, 12),因为你知道你的列表是嵌套的,你可以迭代它两次,应该有五个结果不是9(你有五个嵌套列表)
  • 嗯,我正在尝试计算每个列表中第 n 个价格的平均值,因此计算实际上是每个列表中的第 4 个值,即 (1.2 + 1.2)/2,因为第一个、第四个和第五个列表' 第 4 个元素是空字符串,它不计算在内。所以我的平均计算是正确的,我现在一切正常,计算并返回平均值列表。谢谢
【解决方案2】:

只需将值附加到列表averages

import statistics

def calc_averages():
    allprices = [['','','', '' ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '', ''],
           ['','','' ,1.2 ,1.0 ,2.0 ,1.2 ,1.3 ,1.1 , '', '', ''],
           ['','','' ,1.2, '' ,1.8 ,1.3 ,1.1 , '', '', '', ''],
           ['','','', '' ,1.0 ,2.0 ,1.2 ,1.2 , '', '', '', ''],
           ['','','', '' ,1.0 ,2.0 ,1.1 ,1.2 ,1.4 ,1.8 ,1.9 ,2.2]]
    averages = []
    for prices in zip(*allprices):
        try:
            averages.append(statistics.mean(p for p in prices if p!=''))
        except statistics.StatisticsError:
            averages.append('')
    return averages

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多