gpt4 book ai didi

python - 带有 lambda 函数的 sorted()

转载 作者:太空狗 更新时间:2023-10-30 02:09:54 24 4
gpt4 key购买 nike

我的字符串看起来像"co1/co2", "co3/co4"... "co11/co12"

将其描述为正则表达式:

^(?P<prefix>\w\w)(?P<month>\d+)/(?P<prefix2>\w\w)(?P<month2>\d+)$   

我想根据正则表达式的“月份”组对这些字符串的集合进行排序。 (字符串中的第一个数字(例如“co1/co2”中的“1”或“co12/co13”中的“12”)

不过,我想不出可以在 sorted() 中使用的 lambda 函数来为我执行此操作。

wrong_order = [u'co1/co2', u'co10/co11', u'co11/co12', u'co12/co13', u'co2/co3',
u'co3/co4', u'co4/co5', u'co5/co6', u'co6/co7', u'co7/co8', u'co8/co9',
u'co9/co10']


correct_order = [u'co1/co2', u'co2/co3', u'co3/co4', u'co4/co5', u'co5/co6', \
u'co6/co7', u'co7/co8', u'co8/co9', u'co9/co10', u'co10/co11', u'co11/co12', u'co12/co13']


#this lambda function doesn't work
output = sorted(wrong_order, key=lambda x: (x[2:]))

最佳答案

没有正则表达式:

lambda x: int(x.partition('/')[0][2:])

这会获取 / 之前的字符串部分,然后是除起始 co 之外的所有内容,然后将其转换为整数。

我用了str.partition()因为它比 str.split() 快对于只 split 一次的情况。

演示:

>>> wrong_order = [u'co1/co2', u'co10/co11', u'co11/co12', u'co12/co13', u'co2/co3',
... u'co3/co4', u'co4/co5', u'co5/co6', u'co6/co7', u'co7/co8', u'co8/co9',
... u'co9/co10']
>>> sorted(wrong_order, key=lambda x: int(x.partition('/')[0][2:]))
[u'co1/co2', u'co2/co3', u'co3/co4', u'co4/co5', u'co5/co6', u'co6/co7', u'co7/co8', u'co8/co9', u'co9/co10', u'co10/co11', u'co11/co12', u'co12/co13']

关于python - 带有 lambda 函数的 sorted(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33121496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com