python - 如何在单行中按模对列表进行排序

标签 python

我需要在一行中编写一段代码,该代码将显示一个排序数组,其中负数元素取模(它们在屏幕上显示为负数)

例子:

data = [4, -30, 100, -100, 123, 1, 0, -1, -4]
output:
[0, 1, -1, 4, -4, -30, 100, -100, 123]
data = [4, -30, 100, -100, 123, 1, 0, -1, -4]

def is_module(x):
    if x < 0:
        return 0
    else:
        return 1

print(sorted([data[x] for x in range(len(data)) if is_module(data[x])]))

我期望这样:

    [0, 1, -1, 4, -4, -30, 100, -100, 123]

最佳答案

你可以用 abs 作为键函数对列表进行排序:

sorted(data, key=abs)

返回:

[0, 1, -1, 4, -4, -30, 100, -100, 123]

如果您希望负值始终排在具有相同绝对值的正值之后,您可以使用返回值的绝对值和负值的二元组的函数来代替:

sorted(data, key=lambda n: (abs(n), -n))

关于python - 如何在单行中按模对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57962635/

相关文章:

python - 为什么 Python 没有真正的常量?不危险吗?

python - 基于标准的 Pandas 样本

python - 条形图 : Errorbar Caps Missing

Python 类型错误 : 'Response' object has no attribute 'getitem'

python - 如何修复python中opencv中的错误 "QObject::moveToThread:"?

python - pandas groupby 多列

python - 用子图绘制 Pandas 数据框(子图=真): Place legend and use tight layout

python - Mavericks 之后 Pandas 找不到 dateutil.parser

python - 使用cherrypy进行HTTP和HTTPS

python - Pip 不承认 Cython