Как проверить условие в списке (или массиве), а затем отсортировать элементы на основе этого условия в Python - PullRequest
0 голосов
/ 30 января 2019

У меня есть список комплексных чисел с n элементами, я хочу проверить, сколько элементов является действительными (мнимая часть равна нулю), а затем отсортировать мой список так, чтобы он начинался с действительных чисел.

Например, для приведенного ниже списка:

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

два элемента действительны (первый элемент и шестой элемент). Я хочу знать, что в моем списке 2 реальных элемента, а затем я хочуиметь вид, подобный приведенному ниже, который начинается с действительных чисел, а остальные элементы остаются неизменными:

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

Как я могу это сделать?Спасибо

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Python имеет функцию sorted, которая принимает аргумент key.

Значением параметра key должна быть функция, которая принимает один аргумент и возвращаетключ для использования в целях сортировки.

Вы можете сортировать на основе лямбда-функции, которая проверяет наличие ненулевого мнимого компонента.

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)]
0 голосов
/ 30 января 2019

Вы можете отсортировать числа, сравнивая их мнимую часть с нулем.Те, у кого 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)
...