【问题标题】:Dynamically naming list in python3python3中的动态命名列表
【发布时间】:2020-05-16 20:03:50
【问题描述】:

我想动态命名列表并使用它,我搜索了很多但没有得到令人满意的答案如何做到这一点。

if __name__=="__main__":

    lst_2017=[]
    lst_2018=[]
    lst_2019=[]


    for year in range(2017,2020):
        #avg_data is function which returns a list of number
        lst_"{}".format(year) = avg_data() 

错误:

 File "<ipython-input-84-4c1fefedd83e>", line 9
    lst_"{}".format(year) = avg_data()
           ^
 SyntaxError: invalid syntax

预期:

循环将迭代 3 次,函数返回相应列表中的 3 个列表

示例:

 lst_2017=[1,2,4]
 lst_2018=[3,4,5]
 lst_2019=[3,4,6]

【问题讨论】:

  • 不需要创建动态命名的变量。它没有用。考虑改用字典。

标签: python python-3.x list


【解决方案1】:

使用字典而不是命名多个动态变量。然后,您的所有数据都在一个数据结构中,并且可以从键/值对轻松访问。

对于下面的示例,我只是将 zip 将年份和数据放在一起构建一个字典,其中年份是键,平均值是值。

avg_data = [[1,2,4], [3,4,5], [3,4,6]]

result = {}
for year, avg in zip(range(2017, 2020), avg_data):
    result[year] = avg

print(result)

也可以这样做,因为zip(range(2017, 2020), avg_data) 会给我们(year, avg) 元组,可以使用dict() 直接翻译成我们想要的字典:

result = dict(zip(range(2017, 2020), avg_data))

print(result)

输出:

{2017: [1, 2, 4], 2018: [3, 4, 5], 2019: [3, 4, 6]}

您可能需要调整以上内容才能获得所需的结果,但它显示了总体思路。

【讨论】:

    【解决方案2】:

    将字典与 iter 一起使用:

    avg_data = [[1,2,4], [3,4,5], [3,4,6]] 
    it=iter(avg_data)
    d={}
    for i in range(2017,2020):
        d["lst_"+str(i)]=next(it,None)
    
    for k in d.keys():
        print(k, "=",d[k])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多