2024-04-23 23:21:58 发布
网友
假设我有这样一个清单:
['word_4_0_w_7', 'word_4_0_w_6', 'word_3_0_w_10', 'word_3_0_w_2']
我想根据“单词”后面的数字和“w”后面的数字对它们进行排序。 它看起来像这样:
我们想到的是创建一组列表,然后根据“word”后面的索引,用按“w”排序的字符串填充它们,然后合并它们。在
在Python中是不是更聪明的方法呢?在
您可以为list对象的sort()方法提供函数:
list
sort()
l = ['word_4_0_w_7', 'word_4_0_w_6', 'word_3_0_w_10', 'word_3_0_w_2'] def my_key_func(x): xx = x.split("_") return (int(xx[1]), int(xx[-1])) l.sort(key=my_key_func)
输出:
编辑:根据@dwanderson的注释更改了代码;有关这方面的更多信息可以在here中找到。在
可以使用函数提取字符串的相关部分,然后使用这些部分进行排序:
a = ['word_4_0_w_7', 'word_4_0_w_6', 'word_3_0_w_10', 'word_3_0_w_2'] def sort_func(x): parts = x.split('_'); sort_key = parts[1]+parts[2]+"%02d"%int(parts[4]) return sort_key a_sorted = sorted(a,key=sort_func)
表达式"%02d" %int(x.split('_')[4])用于在第二个数字前面添加前导零,否则10将在2之前排序。您可能需要对x.split('_')[2]提取的数字执行相同的操作。在
"%02d" %int(x.split('_')[4])
10
2
x.split('_')[2]
将Python的key功能与其他答案结合使用:
key
def mykey(value): ls = value.split("_") return int(ls[1]), int(ls[-1]) newlist = sorted(firstlist, key=mykey) ## or, if you want it in place: firstlist.sort(key=mykey)
使用keyvscmp,Python将更加高效。在
cmp
您可以为
list
对象的sort()
方法提供函数:输出:
^{pr2}$编辑:根据@dwanderson的注释更改了代码;有关这方面的更多信息可以在here中找到。在
可以使用函数提取字符串的相关部分,然后使用这些部分进行排序:
表达式
"%02d" %int(x.split('_')[4])
用于在第二个数字前面添加前导零,否则10
将在2
之前排序。您可能需要对x.split('_')[2]
提取的数字执行相同的操作。在将Python的
key
功能与其他答案结合使用:使用
key
vscmp
,Python将更加高效。在相关问题 更多 >
编程相关推荐