如何在Python中检查列表(或数组)上的条件,然后根据该条件对元素进行排序

2024-10-05 17:34:33 发布

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

我有一个包含n个元素的复数列表,我想检查有多少元素是实数(虚数部分是零),然后以实数开头的方式对列表进行排序。你知道吗

例如以下列表:

a = [ 7 + 0j, -2 + 3j, -2 - 3j, 5 + 6j, 5 - 6j, -1+ 0j, -8 + 4j, -8 - 4j]

两个元素是实数(第一个元素和第六个元素)我想知道我的列表中有两个实数元素,然后我想有一个像下面这样的排序,以实数开始,其他元素保持不变:

b = [ 7 + 0j, -1+ 0j, -2 + 3j, -2 - 3j, 5 + 6j, 5 - 6j, -8 + 4j, -8 - 4j]

我该怎么做? 谢谢


Tags: 元素列表排序方式复数实数虚数
2条回答

你可以通过比较数字的虚部和零来排序。带0的将首先出现,其余数字的顺序将保持不变。你知道吗

a = sorted(a, key=lambda x:x.imag!=0)
print(a)

输出

[(7+0j), (-1+0j), (-2+3j), (-2-3j), (5+6j), (5-6j), (-8+4j), (-8-4j)]

要获取此类条目的数量,请使用

sum(x.imag == 0 for x in a)

Python有一个^{}函数,它接受key参数。你知道吗

The value of the key parameter should be a function that takes a single argument and returns a key to use for sorting purposes.

可以基于lambda函数进行排序,该函数检查是否存在非零虚部。你知道吗

a = [ 7 + 0j, -2 + 3j, -2 - 3j, 5 + 6j, 5 - 6j, -1+ 0j, -8 + 4j, -8 - 4j]
sorted(a, key = lambda x: x.imag != 0) 
#Output: [(7+0j), (-1+0j), (-2+3j), (-2-3j), (5+6j), (5-6j), (-8+4j), (-8-4j)]

相关问题 更多 >