首页 新闻 会员 周边

python列表推导式

0
悬赏园豆:60 [已解决问题] 解决于 2022-10-24 08:56

问题遇到的现象和发生背景:

列表推导式转化为正常的for循环就会报错,在运行for循环代码时会报错(RuntimeError: dictionary changed size during iteration)难道是在使用列表推导式时条件成立没有给vol2赋值?等待列表推导式结束才给vol2赋值?

代码如下:

volumeA = 100
volumeB = 20
volumeC = 10

vol1 = []
vol2 = []
c=[]
vol1.extend((volumeA, volumeB, volumeC))

print(globals().items())

vol2 += [val for name, val in globals().items() if name.startswith('volume')]#列表推导式可以正常执行

for name,val in globals().items():#转化为for循环写法就会报错(RuntimeError: dictionary changed size during iteration)
if name.startswith('volume'):
vol2+=c.append(val)

运行结果及报错内容:

我的解答思路和尝试过的方法:

将全局变量赋予一个对象再去for循环得到该对象的里的key和value但是还会报错

我想要达到的结果:

将列表推导式转换为for循环的写法,列表推导式的执行顺序和for循环有区别?求解答

Ttonet的主页 Ttonet | 初学一级 | 园豆:5
提问于:2022-10-21 10:53
< >
分享
最佳答案
1
收获园豆:60
〆灬丶 | 老鸟四级 |园豆:2287 | 2022-10-21 11:56

谢谢大佬,如果将循环对象改变类型的话,那么其他地方也要加上类型转换,这样就和列表推导式拆解的代码不一样了,(我想要的是将列表推导式完全拆解不改变代码,只改变顺序写成for循环)打断点之后发现列表推导式和for循环的写法完全不一样,列表推导式是执行完循环之后才会将对象加到列表中,而for循环通常写法是每循环一次条件成立就是用append将对象加到列表中,可能是我一开始就将列表推导式和for循环的理解错了(原来以为在这种单个条件判断上只要改变一下顺序两种方式可以完全替换实现同样的效果),现在看来他们在不同的场景不可能用完全一样的代码实现完全一样的效果

Ttonet | 园豆:5 (初学一级) | 2022-10-21 12:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册