如何在Python循环迭代中创建并保存独立新数组
解决方法
你现在的问题是每次循环都用同一个变量存储数组,导致之前的数据被覆盖。正确的做法是用一个列表来收集每次生成的数组,之后再统一处理成DataFrame并排序。
步骤拆解:
- 先初始化一个空列表,用来存放所有符合条件的数组
- 循环中每生成一个符合条件的
[E,x,y,z]数组,就把它添加到列表里 - 循环结束后,把列表转成numpy数组(或直接转DataFrame)
- 用pandas对DataFrame按E列排序
完整修正代码:
import numpy as np import pandas as pd # 初始化空列表存结果 results = [] n = 0 for x in range(1,7): for y in range(1,7): for z in range(1,7): E = x**2 + y**2 + z**2 if E <= 14: n += 1 print(f"能量E={E}, nx={x}, ny={y}, nz={z}") # 生成数组并添加到列表 results.append(np.array([E, x, y, z])) else: # E超过14就跳出z的循环,因为z增大E只会更大 break print(f"总共有{n}种组合") # 把列表转成二维numpy数组 results_array = np.array(results) # 转成DataFrame,设置列名 df = pd.DataFrame(results_array, columns=["E", "nx", "ny", "nz"]) # 按E列升序排序(降序的话加ascending=False) sorted_df = df.sort_values(by="E") print("\n排序后的结果:") print(sorted_df)
关键说明:
- 用
results.append(...)替代每次覆盖同一个变量,这样所有符合条件的数组都会被保存下来 - 转成DataFrame后,
sort_values(by="E")就能轻松按首元素(E值)排序 - 修正了你原代码里的语法错误:比如多余的
E=、缩进错误、未完成的break语句
内容的提问来源于stack exchange,提问作者Eigenlumen
相关产品推荐
相关产品推荐

