Python循环处理列表遇赋值异常:s与perc数据同步错乱求助
Python独立列表数据错乱问题修复
问题根源
你代码里的s = sheetData["ANSYS_Export"][0]和perc = sheetData["ANSYS_Export"][0]并没有创建两个独立列表——在Python中,这种赋值是引用传递,两个变量指向内存中同一个嵌套列表对象。所以修改perc的元素时,s的元素会同步被修改,后续计算用了已经改变的值,结果自然错乱。
解决方案
因为原数据是多层嵌套的列表结构,需要用深拷贝来生成完全独立的perc列表。使用Python标准库copy中的deepcopy方法,递归复制所有嵌套元素,彻底分离两个列表的引用。
修正后的代码
import copy sheetData = {'ANSYS_Export': [['Bolt Pretension 33', [[False, 'Time [s]', '1.', '2.', '3.'], [True, 'Bolt Pretension 33 (Working Load) [N]', '0.', '1.29e+005', '1.599e+005'], [True, 'Bolt Pretension 34 (Working Load) [N]', '0.', '1.29e+005', '1.5996e+005'], [True, 'Bolt Pretension 35 (Working Load) [N]', '0.', '1.29e+005', '1.5993e+005']]]]} # 保留原始数据的引用 s = sheetData["ANSYS_Export"][0] # 深拷贝生成独立的perc列表 perc = copy.deepcopy(sheetData["ANSYS_Export"][0]) for x in range(len(s[1])): if x == 0: continue y = 3 while y < len(s[1][x]): # 从原始数据s中取值计算,避免被perc的修改干扰 z = float(s[1][x][y]) / float(s[1][x][3]) perc[1][x][y] = z print(perc[1][x][y]) y += 1 # 验证独立性:修改perc不会影响s print("\n验证两个列表独立:") print(f"s的原始数值:{s[1][1][3]}") print(f"perc的百分比值:{perc[1][1][3]}")
关键说明
copy.deepcopy()会逐层复制所有嵌套的子列表和元素,确保perc和s在内存中是完全独立的对象,互相修改不会影响对方。- 计算时始终从原始列表s中读取数据,避免因为perc的修改导致后续计算使用错误的数值。
内容的提问来源于stack exchange,提问作者Enrique BV
相关产品推荐
相关产品推荐

