我有一个包含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]
我该怎么做? 谢谢
答案 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)