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

时间:2019-01-30 17:54:15

标签: python arrays list sorting complex-numbers

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

例如下面的列表:

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

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

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

我该怎么做? 谢谢

2 个答案:

答案 0 :(得分:2)

Python有一个sorted函数,它接受一个key参数。

  

的关键参数的值应该是一个函数,它接受一个   单个参数,并返回键用于排序目的。

可以排序基于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)]

答案 1 :(得分:1)

您可以通过将数字的虚部与零进行比较来对数字进行排序。那些数字为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)