为了账号安全,请及时绑定邮箱和手机立即绑定

尝试对字母数字坐标进行排序

尝试对字母数字坐标进行排序

红颜莎娜 2023-12-20 19:42:32
我有一个坐标列表,我想按文本和符号之间的数字对它们进行排序。coords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']我希望它像这样列出:coords = ['b150brown','`154blue', 'a154blue', 'b154blue', 'c154blue','d154blue','`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']我尝试过不同的排序和 lambda 排序,但我无法让它通过数字来完成。
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

您可以使用正则表达式来获取数字,然后首先对其进行排序,然后按基础字符串(例如,如果有两个坐标具有相同的数字)进行排序:


import re


coords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']

coords.sort(key=lambda c: (re.search(r'\d+', c).group(0), c))

print(coords)

输出:


['b150brown', '`154blue', 'a154blue', 'b154blue', 'c154blue', 'd154blue', '`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']



查看完整回答
反对 回复 2023-12-20
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

您可以使用c in '0123456789'或c.isdigit过滤掉非数字字符:


>>> s = 'b150brown'

>>> ''.join(c for c in s if c.isdigit())

'150'

>>> int(''.join(c for c in s if c.isdigit()))

150

然后使用它作为key参数list.sort:


coords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']

coords.sort(key=lambda s: int(''.join(c for c in s if c.isdigit())))

print(coords)

# ['b150brown', '`154blue', 'a154blue', 'b154blue', 'c154blue', 'd154blue', '`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']

此外,当字符串具有相同的数字时,您可以通过按字典顺序对字符串进行排序来打破平局,正如Shash Sinha所建议的:


coords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']

coords.sort(key=lambda s: (int(''.join(c for c in s if c.isdigit())), s))

print(coords)

# ['b150brown', '`154blue', 'a154blue', 'b154blue', 'c154blue', 'd154blue', '`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']



查看完整回答
反对 回复 2023-12-20
  • 2 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信