gpt4 book ai didi

python - 用数字和字母排序列表

转载 作者:行者123 更新时间:2023-11-28 17:08:59 25 4
gpt4 key购买 nike

我正在尝试对包含数字和字母的列表进行排序:

names = ["5aG", "6bG", "10cG", "J1", ...]

输出应该是这样的:

['5aG', '5bG', '5aR', '5bR', '6aG', '6bG', '6cG', '6aR', '6bR', '7aG', '7bG', '7aR', '8aG', '8bG', '8aR', '9aG', '9bG', '9aR','10aG', '10bG', '10cG', '10aR', 'J1', 'J2']

字符串的第一个元素始终是 5 - 10 之间的数字,然后是 a - c 中的一个字母,最后是另一个字母(“G”或“R”)。

此外还有字符串“J1”和“J2”。它们应该始终是最后一个(“J1”在“J2”之前)。

我怎样才能实现这样的目标?我考虑过使用 lambda 函数。

到目前为止我是硬编码的,但我认为应该有更好的解决方案。
这是我的硬编码版本:

classes = ['5aG', '5bG', '5aR', '5bR', '6aG', '6bG', '6cG', '6aR', '6bR', '7aG', '7bG', '7aR', '8aG', '8bG', '8aR', '9aG', '9bG', '9aR','10aG', '10bG', '10cG', '10aR', 'J1', 'J2']

def s(v):
"""Get index of element in list"""
try:
return classes.index(v)
except ValueError:
return 500

l = ['5bG', '6aG', '6bG', '8aR', '9aG', '9bG', '9aR', '10cG', '10aR', 'J1', 'J2', '5aG', '']
w = sorted( l, key=s)
print(w)

最佳答案

可以使用re提取前面的整数,然后依靠tuple比较。

import re

def key(s):
num, letters = re.match(r'(\d*)(.*)', s).groups()
return float(num or 'inf'), letters

sorted_names = sorted(names, key=key)

请注意如何依靠 float('inf') 将没有前缀数字的 token 推到末尾。

关于python - 用数字和字母排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49038740/

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