[英]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.