xcode Python - [已解决]如何根据列表或字符串的顺序排列numpy列表

w7t8yxp5  于 2022-11-17  发布在  Python
关注(0)|答案(1)|浏览(120)

我有一个numpy数组:

import numpy as np
phrase = np.array(list("eholl")) 
a = 'hello'

我想根据变量“a”中字母的顺序(h第一,e第二...)对变量进行排序,从而生成有序数组:
已尝试:

z = np.sort(phrase, order=a)

print(z)

我想要的输出:

hello

错误:

ValueError                                Traceback (most recent call last)
<ipython-input-10-64807c091753> in <module>
      2 phrase = np.array(list("eholl"))
      3 a = 'hello'
----> 4 z = np.sort(phrase, order=a)
      5 
      6 print(z)

<__array_function__ internals> in sort(*args, **kwargs)

/usr/local/lib/python3.7/dist-packages/numpy/core/fromnumeric.py in sort(a, axis, kind, order)
    996     else:
    997         a = asanyarray(a).copy(order="K")
--> 998     a.sort(axis=axis, kind=kind, order=order)
    999     return a
   1000 

**ValueError: Cannot specify order when the array has no fields.**
gywdnpxw

gywdnpxw1#

np.sortorder参数用于指定要比较的字段(第一个、第二个等)。它对您没有帮助。
如果你不需要排序函数的直接输出是一个numpy数组,你可以简单地使用内置函数sorted。你可以通过它的key参数指定一个key函数。在你的例子中,排序键是一个字符串的索引,可以通过str.find获得。

import numpy as np
phrase = np.array(list("eholl"))
refer_phrase = 'hello'

# sort by the first position of x in refer_phrase
sorted_phrase_lst = sorted(phrase, key=lambda x: refer_phrase.find(x))
print(sorted_phrase_lst)
# ['h', 'e', 'l', 'l', 'o']
sorted_phrase_str = ''.join(sorted_phrase_lst)
print(sorted_phrase_str)
# hello

相关问题