繁体   English   中英

使用迭代器(Python)在循环内定义和追加新列表

[英]Defining and appending in new list inside a loop using iterator (python)

我正在尝试使用迭代器在循环内启动并添加新列表。 我试图从这个答案中使用字典的主意。

这是我的代码段,您可以忽略代码的详细信息。 如果满足if条件,则需要在特定列表中附加i值,这将类似于patch12,patch53等:

import math as m

d = {}

for i in range(0,10):

     for j in range(0, 10):

          if((m.floor(vector[upper_leaflet[i],0:1]) <= xx[j][0]) & (m.floor(vector[upper_leaflet[i],0:1]) < yy[j][0])):

              d["patch{}{}".format(xx[j][0],yy[j][0])].append(i)

如果我打印patch52 = [ 1, 5, 9 ,10]输出应该类似于执行此操作的正确方法是什么?

您正在尝试创建名称为patch12或patch53等的动态变量。这不能仅通过格式化字符串来完成。 看看这个线程,其中动态变量创建解释。

但是,这不是一个好的编程习惯。 正确的解决方案可能是使用词典或列表。 例:

patches = {}
for i in range(0,10):

     for j in range(0, 10):

          if((m.floor(vector[upper_leaflet[i],0:1]) <= xx[j][0]) & (m.floor(vector[upper_leaflet[i],0:1]) < yy[j][0])):

              key_name = "patch{}{}".format(xx[j][0],yy[j][0])
              #if key already exists, append to that list, if not create new list
              if key_name in patches:
                    key_value = patches[key_name]
              else:
                    key_value = []
              #appending newly value ..
              key_value.append(i)
              patches[key_name] = key_value

此外,在程序中需要使用此数据时,您可以遍历字典以找出所有密钥,例如:

for patch in patches:
    do something...

或者你可以在特定的键(例如直接访问值: patch52通过

value = patches['patch52'] 

这将为您提供与patch52 ex对应的值的列表:

print(patches['patch52'])
[1,4,7,9]

使用collections.defaultdict使事情变得更容易:

import math as m
from collections import defaultdict

d = defaultdict(list)
for i in range(0,10):
     for j in range(0, 10):
          if ((m.floor(vector[upper_leaflet[i],0:1]) <= xx[j][0]) & (m.floor(vector[upper_leaflet[i],0:1]) < yy[j][0])):
              d["patch{}{}".format(xx[j][0],yy[j][0])].append(i)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM