【问题标题】:Create new list based on 'for' loop variable [duplicate]基于'for'循环变量创建新列表[重复]
【发布时间】:2019-01-30 11:32:29
【问题描述】:

如何创建与for 循环变量一样多的空列表?

如:

for i in range(3):
    list_{i} = []  #this is just an idea

for 循环结束时,我会:

list_0 = [] #empty, I could add elements later.
list_1 = [] #empty
list_2 = [] #empty

我是 Python 新手,所以如果这个问题重复,请告诉我,但我没有找到任何具有相同需求的问题。

【问题讨论】:

  • 你不能那样做,因为你最终会得到名为 list_0、list_1 等的变量。似乎很多人已经回复了你可以使用的其他替代方案 :)
  • 很遗憾没有人提到collections.defaultdict。您很有可能需要this is the solution

标签: python list for-loop


【解决方案1】:
lists_= [[] for i in range(3)]
print(lists_)

输出:

[[], [], []]

然后如果您想将元素添加到特定列表_:

lists_[0].append(1)
lists_[0].append(2)
lists_[0].append(3)

print(lists_[0])

输出:

[1, 2, 3]

编辑:

由于 OP 提到 range 是有条件的:

cond_1 = False
if cond_1:
    x = 3
else:
    x = 2
lists_= [[] for i in range(x)]
print(lists_)

输出:

[[], []]
[1, 2, 3]

【讨论】:

  • 问题是list的数量是未知的,所以我需要根据ifcondition创建一个list,所以不知道范围是多少。
  • @L'recherche。条件是什么,范围也可以相应改变。
  • 我有一个 100 行和 3 列的二维数组,所以我检查:if array[i][0] == 1 than create list,而不是 i 递增,这意味着 i 正在检查所有 100 行。最后,如果我有 20 行,第一个元素等于 1 (array[i][0] == 1),我需要 20 个列表。
  • @L'recherche。请检查我已经进行的编辑。
【解决方案2】:

试试这个:

for i in range(3): 
    globals()[f'list_{i}'] = []  # Only Python3.6 or higher

对于低于3.6的python:

for i in range(3): 
    globals()['list_{}'.format(i)] = [] 

那么您将拥有list_0list_1list_2 等于[]

【讨论】:

    【解决方案3】:

    通过列表理解:

    lst = [[] for i in range(3)]
    

    或通过.append()

    lst = list()
    for i in range(3):
        lst.append([])
    
    print(lst)
    

    【讨论】:

      【解决方案4】:

      1.您可以使用 for 循环创建列表的列表

      >>> pool = []
      >>> for i in range(3):
      >>>    pool.append([])
      

      2。您可以动态创建它

      >>> pool = [[] for i in range(3)]
      

      3.但是,如果您想指定名称,最好将它们存储在字典中

      >>> pool = dict([(i, []) for i in range(3)])
      

      输出将是:

      >>> pool
      {0: [], 1: [], 2: []}
      
      

      4.具有可读名称的相同示例

      >>> pool = dict([(i, []) for i in ['list1', 'list2', 'list3']])
      

      该示例中的输出将是:

      >>> pool
      {'list1': [], 'list3': [], 'list2': []}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-24
        • 1970-01-01
        • 1970-01-01
        • 2012-01-21
        • 1970-01-01
        • 2018-02-10
        • 2013-12-06
        • 1970-01-01
        相关资源
        最近更新 更多