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

时间:2016-12-23 11:09:32

标签: python list

我正在尝试启动并使用迭代器在循环中追加新列表。我尝试使用此answer中的字典构思。

以下是我的代码片段,您可以忽略代码的详细信息。如果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],输出应该类似 执行此操作的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

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

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

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相对应的值列表 例如:

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

答案 1 :(得分:0)

使用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)