python中按多个条件排序

2023-11-22

我是编程新手,现在我正在用 python 编写排行榜。我想按第一积分对我的联赛进行排序,如果有两支球队积分相同,我想按净胜球对它们进行排序,如果它们有相同的净胜球,我想按名称排序。

第一个条件非常简单,并且按以下方式工作:

table.sort(reverse=True, key=Team.getPoints)

如何插入以下两个条件?


key函数返回一个元组,其中项目按优先级降序排列:

table.sort(reverse=True, key=lambda team: (Team.getPoints(team),
                                           Team.getGoalDifference(team),
                                           Team.getName(team))

或者,您可以记住算法 101 中的一个事实,并利用这个事实.sort() is a stable排序,因此如果列表中项目比较相等,则不会更改它们的相对顺序。这意味着您可以按优先级升序排序三次:

table.sort(reverse=True, key=Team.getName)
table.sort(reverse=True, key=Team.getGoalDifference)
table.sort(reverse=True, key=Team.getPoints)

这会比较慢,但可以让您轻松指定每个步骤是否应该在reverse或不。这可以在不使用多次排序的情况下完成cmp_to_key(),但是比较器函数并不简单,例如:

def team_cmp(t1, t2):
    for key_func, reverse in [(Team.getName, True),
                              (Team.getGoalDifference, True),
                              (Team.getPoints, True)]:
        result = cmp(key_func(t1), key_func(t2))
        if reverse: result = -result;
        if result: return result
    return 0

table.sort(functools.cmp_to_key(team_cmp))

(免责声明:以上内容是凭记忆写的,未经测试。)强调的是“无需多次通过”,这并不一定意味着“更快”。比较器函数的开销和cmp_to_key(),两者都是用 Python 实现的(而不是list.sort() and operator.itemgetter(),它应该是 C 核心的一部分)可能很重要。

顺便说一句,您不需要创建虚拟函数来传递给key参数。您可以使用以下方法直接访问该属性:

table.sort(key=lambda t: t.points)

or the attrgetter运算符包装器:

table.sort(key=attrgetter('points'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中按多个条件排序 的相关文章

随机推荐

  • 如何将网络中的图形加载到 PyTorch 几何图形并设置节点特征和标签?

    Goal 我正在尝试导入图表FROMnetworkx 到 PyTorch 几何和设置标签和节点特征 这是Python中的 问题 我该如何做到这一点 从networkx到PyTorch几何的转换 大概通过使用from networkx功能 如
  • 访问类别中的私有变量会导致链接器错误

    编辑 我不会这样做 我现在意识到这有多么危险 但是 这个问题仍然纯粹出于学术目的 我正在尝试在 NSCollectionView 上实现一个类别 该类别将允许我访问私有变量 displayedItems 我需要能够在我的子类中访问它 因此
  • 未捕获的引用错误:$未定义(ajax)

    我在一个简单的 jsp 上遇到此错误 未捕获的引用错误 未定义 我只是试图回忆一下 Eclipse 上另一个项目的服务休息 但它似乎不起作用 代码在这里
  • HttpUrlConnection 带进度条的分段文件上传

    我想通过以下方式检查上传文件的进度HttpUrlConnection 我怎样才能做到这一点 我尝试在写入数据时计算字节OutputStream但这是错误的 因为只有当我打电话时才会真正上传conn getInputStream 所以我需要以
  • 用悬停而不是点击触发 fancybox?

    我试图在鼠标悬停在链接上时触发 fancybox 但没有运气 有什么建议吗 document ready function This is basic uses default settings a inline fancybox hide
  • 使用 alpha 透明度从 0 到 1 绘制透明渐变

    我在 Android 中有一个动态生成的位图 我想从顶部边缘开始羽化 这样边界区域在顶部完全透明 并逐渐在下面稍微变为完全不透明 创建均匀的完全透明的顶部边缘 transparentPaint new Paint Paint ANTI AL
  • 自定义 Bootstrap 4 的网格系统断点

    我有一个应用程序 其中设计需要分别从台式机到平板电脑或 xl 到 lg 的 1280 个断点 然而 Bootstrap 本身在 1200 处有 xl 断点 我需要全局更改 xl 断点以进行引导 我必须从源文件重新编译 Bootstrap 4
  • 如何从 git diff --no-index 中排除文件和目录

    如何排除文件和目录git diff no index 例如 我想显示两个目录之间的差异project1 project2而忽略了他们的高层 git目录 project1 git project2 git 和他们所有的 DS Store fi
  • 使用 BoneCP:处理来自池的连接

    我刚刚开始使用 BoneCP 这是我第一次使用连接池 我对应该如何使用它有点困惑 目前我将 BoneCP 对象保存为静态变量 因此我可以在不同的连接之间使用它 当我完成连接后 我将其关闭connection close 我应该这样做 还是不
  • 为什么每个公共类都在单独的文件中?

    我最近开始学习Java 发现很奇怪 每个Java公共类都必须在单独的文件中声明 我是一名 C 程序员 C 不强制执行任何此类限制 Java为什么要这样做呢 有没有什么设计考虑 编辑 基于一些答案 为什么 Java 在 IDE 时代还不取消这
  • urllib2 python(传输编码:分块)

    我使用以下 python 代码来下载 html 页面 response urllib2 urlopen current URL msg response read print msg 对于诸如以下的页面this one 它打开 url 时没
  • 类和数据类型有什么区别

    当我通读 UML 规范时发现 class has a set of attributes operations and data type has a set of attributes operations 1 关于数据类型的属性 操作
  • 如何在触摸屏幕(搜索栏)时隐藏键盘

    当我单击 搜索 或单击 取消 时 键盘会隐藏 但我还希望当我单击屏幕上的某个位置时键盘会隐藏 我找到了几个关于文本字段的教程 但我们正在使用搜索栏 有人可以告诉我该怎么做吗 Thanks Try This 在你的 h 文件中添加 UISea
  • 单击选择框上的触发器在 jQuery 中不起作用

    如何使用触发器打开下拉列表 这是不起作用的代码 select trigger click 请注意 mousedown 和 mouseup 也不起作用 select children option each function if this
  • 禁用 firefox 另存为dialog-selenium

    我正在使用 selenium 进行网页抓取 每当我尝试下载文件时 即使我申请 也会弹出 Firefox 下载 另存为文件的情况profile set preference browser helperApps neverAsk saveTo
  • 如何在Android中启用USB调试?

    如何在 Nexus 7 第一代 中启用 USB 调试 编辑 接受的答案也适用于隐藏开发人员选项的其他 Android 设备 在 设置 的 开发者选项 区域中打开 USB 调试 如果您没有看到 开发人员选项 请进入 设置 中的 关于设备 然后
  • Laravel 5.8 全局设置区域设置

    我有一条路线 Route get setlocale locale function locale App setLocale locale return back gt name setlocale 当我去 example com set
  • CXF 客户端代理线程安全吗?

    我正在使用 CXF 生成 SOAP 客户端类 在里面CXF 文档 他们写 JAX WS 客户端代理线程安全吗 JAX WS 官方答案 不 根据 JAX WS 规范 客户端代理不是线程安全的 要编写可移植代码 您应该将它们视为非线程安全并同步
  • 嵌套对象的远程 ViewModel 验证不起作用

    我有一个类用户 如下所示 public class User public int UserId get set Required ErrorMessage A username is required StringLength 20 Er
  • python中按多个条件排序

    我是编程新手 现在我正在用 python 编写排行榜 我想按第一积分对我的联赛进行排序 如果有两支球队积分相同 我想按净胜球对它们进行排序 如果它们有相同的净胜球 我想按名称排序 第一个条件非常简单 并且按以下方式工作 table sort