如何按特定顺序对字符串列表进行排序?

2024-04-23 23:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样一个清单:

['word_4_0_w_7',
 'word_4_0_w_6',
 'word_3_0_w_10',
 'word_3_0_w_2']

我想根据“单词”后面的数字和“w”后面的数字对它们进行排序。 它看起来像这样:

^{pr2}$

我们想到的是创建一组列表,然后根据“word”后面的索引,用按“w”排序的字符串填充它们,然后合并它们。在

在Python中是不是更聪明的方法呢?在


Tags: 方法字符串列表排序数字单词wordpr2
3条回答

您可以为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)

输出:

^{pr2}$

编辑:根据@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]提取的数字执行相同的操作。在

将Python的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将更加高效。在

相关问题 更多 >