【问题标题】:At each for loop iteration, how to create and name a list including the number of the iteration in its name, and fill this list? [duplicate]在每次 for 循环迭代中,如何创建和命名一个列表,包括其名称中的迭代次数,并填充该列表? [复制]
【发布时间】:2022-12-19 01:33:45
【问题描述】:

我想做的事 :

  • 在 python 循环的每次迭代期间,我想创建一个新列表,为该列表指定一个名称,其中将包含迭代次数,我还希望该列表由来自迭代。

我试过的,使用字典

dicoo= {}
for i in range(0,5,1):
    dicoo['list_number_'+str(i)] = [i for i in range(i,240,60)]  
print(dicoo)

上面的代码返回:

{'list_number_0': [0, 60, 120, 180], 'list_number_1': [1, 61, 121, 181], 'list_number_2': [2, 62, 122, 182], 'list_number_3': [3, 63, 123, 183], 'list_number_4': [4, 64, 124, 184]}

然后,在上面的字典中,我们有:

  • 作为键,列表的名称,递增
  • 作为值,值列表

我现在想通过其元素“填充”(分配)每个列表,就像这样做:

list_number_0 = [0, 60, 120, 180]
list_number_1 = [1, 61, 121, 181]
list_number_2 = [2, 62, 122, 182]
list_number_3 = [3, 63, 123, 183]

问题 :

  1. 我们如何“填充”(意思是“分配给”)每个编号变量(字典键的每个列表名称)与其对应的元素(字典值的每个列表)?
  2. 除了使用字典来管理它还有其他方法吗?

【问题讨论】:

  • 什么是"fill" each list
  • 我认为您可以构建一个哈希表,但这只会浪费精力,因为 python 字典已经很高效了。
  • 您是说要将字典中的每个项目分配给命名变量吗?为什么?您可以按原样以 dicoo[list_number_0] 等方式访问它们。
  • “填充”每个列表:我的意思是,为每个键分配相应的值。获取 list_number_0 = [0, 60, 120, 180] 并稍后使用 list_number_0 调用它
  • @anch 从字面上看,我在下面发布的内容就是这样做的……但使用它并不是一个好主意

标签: python


【解决方案1】:

您可以使用 f-stringwalrus operatoreval 的组合来实现您想要的:

for list_name, value in dicoo.items():
    eval(f"({list_name}:={value})")

f 字符串中的括号是强制性的,因为 eval 需要一个表达式而不是一个语句。 (区别在这里解释What is the difference between an expression and a statement in Python?

但请记住,它是:

a) 丑陋的

b)对于任何问题都不是一个可行的解决方案,因为如上所述你已经有了带有这些值的字典,它是快速且可读的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-24
    • 2016-11-16
    • 2021-12-22
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    相关资源
    最近更新 更多