Python sorted()返回含array([...], dtype=int64)的怪异列表问题
问题原因与解决办法
原因
用sorted()处理numpy数组时,每个子元素会被保留为numpy的ndarray对象,输出时会显示该对象的完整标识(包括dtype信息);而原numpy数组直接输出时,numpy会自动优化整体的显示格式,不会展开每个子元素的类型细节,所以看起来更简洁。
解决办法
1. 转为Python原生列表后排序
先把numpy数组转换为普通Python列表,让sorted()处理原生列表元素,输出就会回到简洁的格式:
import numpy as np # 生成随机整数对 arr = np.random.randint(1, 201, size=(50, 2)) # 转换为原生列表 arr_list = arr.tolist() # 按第一个元素排序 sorted_list = sorted(arr_list, key=lambda x: x[0]) # 输出结果 for pair in sorted_list: print(pair)
2. 使用numpy自带的排序方法(推荐)
numpy提供了更高效的数组排序方式,直接对原数组操作,既保持输出格式一致,性能也更优:
import numpy as np arr = np.random.randint(1, 201, size=(50, 2)) # 按第一列排序:先获取第一列排序后的索引,再用索引取行 sorted_arr = arr[arr[:, 0].argsort()] # 输出结果 print(sorted_arr)
3. 自定义输出格式(如果坚持用sorted())
如果一定要用sorted()处理numpy数组,可以在输出时把每个ndarray子元素转为列表或元组:
import numpy as np arr = np.random.randint(1, 201, size=(50, 2)) sorted_arr = sorted(arr, key=lambda x: x[0]) # 输出时转换每个元素格式 for pair in sorted_arr: print(list(pair)) # 或 print(tuple(pair))
内容的提问来源于stack exchange,提问作者Alex Graalum
相关产品推荐
相关产品推荐

