我有一个字符串列表
line = ["set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name','B10_Stat_TRXA_FCC'),'port', '1218');",
"set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name','Az_INS3_RawValidity'),'port', '1438');"]
我正在尝试根据最后一位数字1438和1218进行排序 数字排序..“ 1438”应视为数字
下面几行没有给我预期的结果
line = sorted(line)
["set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name','Az_INS3_RawValidity'),'port', '1438');",
"set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name','B10_Stat_TRXA_FCC'),'port', '1218');"]
答案 0 :(得分:2)
您可以使用正则表达式在sorted
的关键参数中查找最后一个由单引号引起的数字:
import re
sorted(line,key=lambda x: int(re.findall("'(\d+)'", x)[-1]))
答案 1 :(得分:1)
您可以从最后一个逗号开始提取子字符串,然后从该字符串中提取数字。
sorted(line, key=lambda s: int(''.join(c for c in s.split(',')[-1] if c.isdigit())))
给予
["set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name','B10_Stat_TRXA_FCC'),'port', '1218');",
"set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name','Az_INS3_RawValidity'),'port', '1438');"]
答案 2 :(得分:1)
假设您的数据保持该格式:
>>> sorted(line, key=lambda x: int(x.split()[-1][1:-3]))
["set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name','B10_Stat_TRXA_FCC'),'port', '1218');",
"set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name','Az_INS3_RawValidity'),'port', '1438');"]
我取每一行,将其分割,然后取最后一项(例如,第一行为"'1218');"
)。然后,它通过切片符号剥离第一个字符('
)和最后三个字符(');
)。最后,它将文本值转换为整数,并将其用作排序的键。
正则表达式解决方案更通用。
sorted(line, key=lambda x: int(re.findall(r'(\d+)', x.split()[-1])[0]))
如果拆分中的最后一项不包含任何数字,则此操作将失败。
答案 3 :(得分:0)
使用python regex(https://docs.python.org/3.6/library/re.html)在字符串末尾提取整数值,然后可以创建一个函数,该函数将字符串作为参数,并返回整数。
最后,将lambda用作已排序方法的key参数以传递函数。 Python将使用您的函数作为排序的键。 (例如:Syntax behind sorted(key=lambda: ...))
答案 4 :(得分:0)
不如@Alexander响应,结果相同,但需要额外的步骤
new = sorted(line, key=lambda x: int((x.split()[-1]).split("'")[1]))
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 list.py ["set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name' ,'B10_Stat_TRXA_FCC'),'port', '1218');", "set_param(find_system('Fccroot_to_ICD','RegExp','on','FindAll','on','Name', 'Az_INS3_RawValidity'),'port', '1438');"]