【问题标题】:How to check a condition on a list (or array) and then sort the elements based on that condition in Python如何检查列表(或数组)上的条件,然后在 Python 中根据该条件对元素进行排序
【发布时间】:2019-01-30 17:54:15
【问题描述】:

我有一个包含 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]

我该怎么做? 谢谢

【问题讨论】:

  • 你有没有自己尝试过解决问题?
  • @FUNNYDMAN 实际上没有。我对 Python 很陌生

标签: python arrays list sorting complex-numbers


【解决方案1】:

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)]

【讨论】:

    【解决方案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)
    

    【讨论】:

    • 谢谢,它有效。有没有办法计算虚部为零的元素的数量?
    猜你喜欢
    • 2022-08-15
    • 1970-01-01
    • 2016-07-13
    • 2013-09-30
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2013-04-22
    相关资源
    最近更新 更多