Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据变量名制作列表_Python_List - Fatal编程技术网

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()