【问题标题】:function using a list in python在python中使用列表的函数
【发布时间】:2013-10-31 02:26:19
【问题描述】:

我想要一个函数来返回列表中每个数字的方程值。我有一个包含 24 个参数的列表,我需要为这个列表的每个值求解一个方程。

这是我获取列表的方式:

wlist=[]

def w(i):

    for i in range(24):
        Calctruesolar=((i*60/1440)*1440+eq_time()+4*long-60*timezone)%1440
        if Calctruesolar/4<0:
            Calcw=(Calctruesolar/4)+180
            wlist.append(Calcw)
            print(Calcw)
        else:
            Calcw=(Calctruesolar/4)-180
            wlist.append(Calcw)
            print(Calcw)

那么,列表就是这个:

>>> wlist=
[166.24797550450222, -178.75202449549778, -163.75202449549778, -148.75202449549778, -133.75202449549778, -118.75202449549778, -103.75202449549778, -88.75202449549778, -73.75202449549778, -58.75202449549778, -43.75202449549778, -28.75202449549778, -13.752024495497778, 1.2479755045022216, 16.24797550450222, 31.24797550450222, 46.24797550450222, 61.24797550450222, 76.24797550450222, 91.24797550450222, 106.24797550450222, 121.24797550450222, 136.24797550450222, 151.24797550450222]

现在,我使用下一个函数:

def hourly_radiation(wlist):

    for i in wlist:
        Calcrt=(math.pi/24)*(a()+b()*math.cos(math.radians(i)))*((math.cos(math.radians(i)))-math.cos(math.radians(wss())))/(math.sin(math.radians(wss()))-((math.pi*wss()/180)*math.cos(math.radians(wss()))))
        CalcI=Calcrt*radiation
        print(Calcrt,CalcI)

所以,我想为列表中的每个值接收CalcrtCalcI。但它不起作用。我一直在互联网和教程中寻找信息,但我没有找到任何东西。

【问题讨论】:

  • 描述它是如何不起作用的。
  • 为什么不在函数内部创建列表并在末尾添加return wlist?您也可以只有一个函数来解决一个方程并在列表理解中调用它:[w(el) for el in data]
  • @user2882337 可能是因为wlist 为空。您确实hourly_radiation 之前致电w(i) 对吗?
  • 看看 PEP8 风格指南
  • 顺便说一句,w() 方法中的i 参数实际上并没有被使用,被for i in 循环所掩盖。

标签: python list function


【解决方案1】:

试试这个:

def hourly_radiation(wlist):
    rt_list = []
    I_list = []
    for i in wlist:
        Calcrt = (math.pi/24)*(a()+b()*math.cos(math.radians(i)))*((math.cos(math.radians(i)))-math.cos(math.radians(wss())))/(math.sin(math.radians(wss()))-((math.pi*wss()/180)*math.cos(math.radians(wss()))))
        CalcI = Calcrt*radiation
        rt_list.append(Calcrt)
        i_list.append(CalcI)
        print(Calcrt,CalcI)
    dict = {}
    dict["Calcrt"] = rt_list
    dict["CalcI"] = i_list
    return dict

这会将值作为包含两个列表的字典返回。您可以使用任何符合您要求的数据结构。

您还可以在每次循环运行时创建一个元组,并将其附加到列表中并返回,例如:

def hourly_radiation(wlist):
    rt_list = []
    data = ()
    for i in wlist:
        Calcrt = (math.pi/24)*(a()+b()*math.cos(math.radians(i)))*((math.cos(math.radians(i)))-math.cos(math.radians(wss())))/(math.sin(math.radians(wss()))-((math.pi*wss()/180)*math.cos(math.radians(wss()))))
        CalcI = Calcrt*radiation
        data = (Calcrt, CalcI)
        print(Calcrt, CalcI)
        rt_list.append(data)
    return rt_list

我没有运行或测试过这段代码,但我希望它可以工作。

请将此作为起点,而不是作为复制粘贴解决方案。

【讨论】:

  • 它正在工作!非常感谢ghostofc!我意识到我的错误是什么,我需要在尝试获取 hourly_radiation(wlist) 的值之前调用 w(i) 来创建列表 (wlist),因为如果我不以这种方式操作 wlist 是空的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2021-04-05
  • 2013-05-11
  • 2017-07-25
相关资源
最近更新 更多