多态特性在python的sort()函数中失败,我们如何在python中对虚数排序?

2024-06-16 14:54:32 发布

您现在位置:Python中文网/ 问答频道 /正文

理想情况下,sort()函数是多态性的极好例子。在sort()函数的情况下,您可以使用它对几乎任何内容进行排序。在

In [27]: b
Out[27]: [3, 4, 5, 6]

In [28]: b = ['a','b',5,6,None]

In [29]: b.sort()

In [30]: b
Out[30]: [None, 5, 6, 'a', 'b']

In [31]: b = ['a','b',23,'c',None,5j]

In [32]: b.sort()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/dubizzle/webapps/django/dubizzle/<ipython-input-32-fc40da74ac51> in <module>()
----> 1 b.sort()

TypeError: no ordering relation is defined for complex numbers

但在虚数情况下sort()函数似乎失败了。请注意,我得到了这个错误类型错误:没有为复数定义排序关系。在

所以我的问题是

  1. 这个顺序到底是在哪里定义的?sort()函数如何在内部工作?在
  2. 把这个排序关系留给复数有什么目的吗?还是因为我们在c语言中没有幂运算符而忽略了它(一个错误)。在
  3. 在python中,如何对虚(复数)数进行排序?我们有Python式的方法吗?在

Tags: 函数innone定义排序关系错误情况
2条回答

在数学术语中,复数的集合不能是完全有序的集合;定义它们的顺序需要您提供一个键来对它们进行排序。这取决于你想要什么:你想按它们的实际值排序吗?在

b.sort(key=lambda complex_: complex_.real)

根据他们的想象值?在

^{pr2}$

以他们的规模?在

b.sort(key=lambda complex_: sqrt(complex_.real**2 + complex_.imag**2))

不管您想对它们进行排序,您可以指定一个函数来使用key关键字比较元素。在

可以按实部或虚部进行排序,方法如下:

>>> x = [(1+2j),(2+3j),(2+1j),(7+4j),(2+2j)]
>>> sorted(x, key=lambda x: x.real)
[(1+2j), (2+1j), (2+2j), (2+3j), (7+4j)]
>>> sorted(x, key=lambda x: x.imag)
[(2+1j), (1+2j), (2+2j), (2+3j), (7+4j)]

或者:

^{pr2}$

复数没有自然的顺序,因此必须指定要以何种方式对其排序。在

相关问题 更多 >