【问题标题】:Call a list variable from a for loop in Python从 Python 中的 for 循环调用列表变量
【发布时间】:2016-08-31 23:10:35
【问题描述】:

如果我有预先设置的同名列表变量,但它们以不同的数字结尾,我如何在 for 循环中创建将调用这些列表的变量?

我的问题是我在 for 循环中创建的变量保留为字符串。我需要它来识别它只是一个变量的名称。

例子:

list1 = [2, 4, 3, 7]
list2 = [4, 5, 6]
list3 = [9, 5, 7, 8, 3, 2, 1]
list4 = [4, 1]

for i in range(1,5):
    print ("list%d" % (i))

这导致打印字符串:

list1

list2

list3

list4

我希望它打印出实际的列表。

感谢您的帮助!

【问题讨论】:

  • 任何时候你认为你需要像这样的动态变量名,你就错了。使用数组或字典。
  • 使用嵌套数组,您可以使用 i 变量对其进行索引

标签: python loops variables for-loop


【解决方案1】:

您可以通过使用 'eval' 来实现以下目标。

list1 = [2, 4, 3, 7]
list2 = [4, 5, 6]
list3 = [9, 5, 7, 8, 3, 2, 1]
list4 = [4, 1]

for i in range(1,5):
    print (eval('list%d'% (i)))

但正如 cmets 中提到的,不建议这样做。你应该用dictlist 重写list

my_list = [[2, 4, 3, 7],
           [4, 5, 6],
           [9, 5, 7, 8, 3, 2, 1],
           [4, 1]]

for i in range(len(my_list)):
    print (my_list[i])

请注意,我将变量 list 的名称更改为 my_list,因为单词 list 是保留字。

【讨论】:

    【解决方案2】:

    您正在打印字符串文字(即纯文本)而不是每个列表的实际变量。您可以做的一件事是将这些列表放入类或字典中。

    假设它是一个类:

    class cls:
        list1 = [2, 4, 3, 7]
        list2 = [4, 5, 6]
        list3 = [9, 5, 7, 8, 3, 2, 1]
        list4 = [4, 1]
    
    
    for i in range(1, 5):
        print getattr(cls, 'list{}'.format(i))
    

    假设它是一本字典:

    lists = {
        'list1': [2, 4, 3, 7],
        'list2': [4, 5, 6],
        'list3': [9, 5, 7, 8, 3, 2, 1],
        'list4': [4, 1],
    }
    
    for k, v in lists.items():
        print '{0}={1}'.format(k, v)
    

    【讨论】:

      【解决方案3】:

      按照 cmets 中的建议,您应该考虑在此处使用其他一些数据结构。

      如果您仍然希望它工作。您可以尝试如下

      for i in range(1,5):
          print (eval("list"+str(i)))
      

      【讨论】:

        【解决方案4】:

        打印字符串而不是列表变量的代码问题

        循环遍历列表变量

        list1 = [2, 4, 3, 7]
        list2 = [4, 5, 6]
        list3 = [9, 5, 7, 8, 3, 2, 1]
        list4 = [4, 1]
        
        for i in list1:
            print (i)
        

        或者您可以将所有列表放在一个列表中并循环遍历它

        new_list=[[2, 4, 3, 7],[4, 5, 6],[9, 5, 7, 8, 3, 2, 1],[4, 1]]
        
        for e in new_list:
            print(e)
        

        您也可以将它们全部放入字典结构 {key,value}

        dic_of_lists={"list1":[2, 4, 3, 7],"list2":[4, 5, 6]
                  ,"list3":[9, 5, 7, 8, 3, 2, 1],"list4":[4, 1]}
        
        #to loop through the dictionary
        for key,value in dic_of_lists.items():
            print(key+" : ")
            print(value)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-01-20
          • 2016-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-13
          • 2020-02-25
          • 2015-12-22
          相关资源
          最近更新 更多