我正在尝试启动并使用迭代器在循环中追加新列表。我尝试使用此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]
,输出应该类似
执行此操作的正确方法是什么?
答案 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)