首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一行程序中按模数对列表进行排序

问如何在一行程序中按模数对列表进行排序
EN

Stack Overflow用户
提问于 2019-09-17 02:37:27
回答 1查看 193关注 0票数 2

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

示例:

代码语言:javascript
复制
data = [4, -30, 100, -100, 123, 1, 0, -1, -4]
output:
[0, 1, -1, 4, -4, -30, 100, -100, 123]
代码语言:javascript
复制
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])]))

我预计是这样的:

代码语言:javascript
复制
    [0, 1, -1, 4, -4, -30, 100, -100, 123]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-17 02:40:49

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

代码语言:javascript
复制
sorted(data, key=abs)

这将返回:

代码语言:javascript
复制
[0, 1, -1, 4, -4, -30, 100, -100, 123]

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

代码语言:javascript
复制
sorted(data, key=lambda n: (abs(n), -n))
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57962635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档