Python对数组进行排序
我试图对包含变量类的numpy数组进行排序Python对数组进行排序,python,sorting,Python,Sorting,我试图对包含变量类的numpy数组进行排序 groups =['(0, 10]', '(10, 20]', '(100, 110]', '(110, 120]', '(120, 130]', '(130, 140]', '(140, 150]', '(150, 160]', '(160, 170]', '(170, 180]', '(180, 190]', '(190, 200]', '(20, 30]', '(200, 210]', '(210, 220]
groups =['(0, 10]', '(10, 20]', '(100, 110]', '(110, 120]', '(120, 130]',
'(130, 140]', '(140, 150]', '(150, 160]', '(160, 170]', '(170, 180]',
'(180, 190]', '(190, 200]', '(20, 30]', '(200, 210]', '(210, 220]',
'(230, 240]', '(30, 40]', '(40, 50]', '(50, 60]', '(60, 70]',
'(70, 80]', '(80, 90]', '(90, 100]']
我想要这个:
groups = ['(0, 10]', '(10, 20]','(30, 40]','(40, 50]', '(50, 60]', ...]
我试过这个:
sort(groups)
但是什么都没有……。您的元素有两个问题
- 它们是字符串,不是数字的元组
- 关闭]与打开不匹配(
groups = [eval(group[:-1] + ')') for group in groups]
print(sorted(groups))
您必须将字符串解释为数字元组,否则它们将按字典顺序排序(这将给出错误的结果!): 返回:
['(0, 10]', '(10, 20]', '(20, 30]', '(30, 40]', '(40, 50]', '(50, 60]', '(60, 70]',
'(70, 80]', '(80, 90]', '(90, 100]', '(100, 110]', '(110, 120]', '(120, 130]',
'(130, 140]', '(140, 150]', '(150, 160]', '(160, 170]', '(170, 180]', '(180, 190]',
'(190, 200]', '(200, 210]', '(210, 220]', '(230, 240]']
排序函数是
sorted
。我们将使用一个键函数提取数字并将其转换为整数元组
sorted(groups, key=lambda x: tuple(map(int, x[1:-1].split(','))))
输出:
['(0, 10]', '(10, 20]', '(20, 30]', '(30, 40]', '(40, 50]', '(50, 60]',
'(60, 70]', '(70, 80]', '(80, 90]', '(90, 100]', '(100, 110]', '(110, 120]',
'(120, 130]', '(130, 140]', '(140, 150]', '(150, 160]', '(160, 170]',
'(170, 180]', '(180, 190]', '(190, 200]', '(200, 210]', '(210, 220]', '(230, 240]']
NameError:名称“sort”未定义此数组是使用熊猫来生成的吗?cut?是的,我使用了熊猫。cut您是否将生成的类别转换为字符串列表,或者这些元素在实际代码中仍然是分类数据类型?请避免
eval
。我知道,但在这种情况下想不出更好的方法ast.literal\u eval
是非常安全的,但RIT不起作用……我想找到一种不丢失队列的方法classes@dimitrisGmk你所说的类的“形成”是什么意思?关键函数对它们进行排序,就像它们是元组一样,但实际上不会更改值。sorted
创建一个新列表,而不会修改旧列表。
['(0, 10]', '(10, 20]', '(20, 30]', '(30, 40]', '(40, 50]', '(50, 60]',
'(60, 70]', '(70, 80]', '(80, 90]', '(90, 100]', '(100, 110]', '(110, 120]',
'(120, 130]', '(130, 140]', '(140, 150]', '(150, 160]', '(160, 170]',
'(170, 180]', '(180, 190]', '(190, 200]', '(200, 210]', '(210, 220]', '(230, 240]']