Python 根据变量名制作列表
我试图通过匹配字符串Python 根据变量名制作列表,python,list,Python,List,我试图通过匹配字符串zz zza=[1,1,1] zzb=[2,2,2] zzc=[3,3,3] final=[] a= vars() for i in a: if 'zz' in i: final.append(a[i]) 获取此错误RuntimeError:在迭代过程中更改了字典的大小 所需输出:final=[[1,1,1],[2,2,2],[3,3,3]] 基本上,我试图完成的是让代码根据我设置的变量自动生成一个列表。因为我会有很多,不想每次添加另一个列表时
zz
zza=[1,1,1]
zzb=[2,2,2]
zzc=[3,3,3]
final=[]
a= vars()
for i in a:
if 'zz' in i:
final.append(a[i])
获取此错误RuntimeError:在迭代过程中更改了字典的大小
所需输出:final=[[1,1,1],[2,2,2],[3,3,3]]
基本上,我试图完成的是让代码根据我设置的变量自动生成一个列表。因为我会有很多,不想每次添加另一个列表时手动附加final
,如下所示:
final=[zza,zzb,zzc]
等等。将实现您的目标的最小更改是用vars().copy()替换vars()
vars()
在迭代for循环时会发生更改a=vars()
为vars()
创建别名。由于a
是vars()
的别名,如果vars()
发生变化,a
将发生变化。当您循环使用的字典发生更改时,python会抛出一个异常。使用vars().copy()
创建的vars()
副本不会随着程序的执行而更改
zza = [1,1,1]
zzb = [2,2,2]
zzc = [3,3,3]
final = []
a = vars().copy()
for i in a:
if 'zz' in i:
final.append(a[i])
为了证明vars()
随着程序在for
循环中的循环而改变,请将print(vars())
放入for
循环中,并注意vars()
对于每个迭代都是不同的
有关变量赋值在python中如何工作的更多信息,请阅读。要点是a=b
不会创建b
的副本。相反,a
和b
是同一对象的名称(或别名)。python使用现有对象有意义的一个原因是创建对象的副本会占用更多的内存和处理时间。请解释一下,为什么要创建别名?我以为我是用a=var()