对名称和编号的字符串列表进行排序

时间:2015-06-08 15:11:16

标签: python-2.7 sorting

我正在尝试对100个文件名列表进行排序,以便在以后的计算中以正确的顺序使用它们。所有文件名都有' name_1'在名称的开头和' _out.txt'在末尾。差异是介于两者之间的数字,从1-100

列表看起来有点像这样:

['name_1_100_out.txt', 'name_1_10_out.txt', 'name_1_6_out.txt', 'name_1_5_out.txt', 'name_1_2_out.txt']

对于我想要的这个实际例子:

['name_1_2_out.txt', 'name_1_5_out.txt', 'name_1_6_out.txt', 'name_1_10_out.txt', 'name_1_100_out.txt']

现在我尝试了list.sortsorted(list),但没有运气。我也尝试过使用key = int或key = str,但是没有一个可以提供帮助,因为它似乎无法将字符串的一部分转换为int。

任何人都可以帮助我提供建议

3 个答案:

答案 0 :(得分:2)

你需要前导零来按你想要的方式排序。

MyUser u = new MyUser();
// find users without the last name containing "Jay"
u.AdvancedSearchFilter.WhereLastName("Jay", MatchType.NotEquals);

PrincipalSearcher ps = new PrincipalSearcher(u);
var res = ps.FindAll().Cast<MyUser>();

foreach (MyUser p in res)
{
    // use the results here.
}

结果

#!/usr/bin/python # -*- coding: utf-8 -*- L=['name_1_100_out.txt', 'name_1_10_out.txt', 'name_1_6_out.txt', 'name_1_5_out.txt', 'name_1_2_out.txt'] OUT=[] n='100' # max number for item in L: old=item[7:-8] # Faulty index if len(old) < len(n): new='0'*(len(n)-len(old))+old # Nice index item=item.replace(old, new) OUT.append(item) OUT.sort() print OUT ]

我建议重命名文件以便以后更轻松,因为并非所有文件管理器都按顺序显示错误的文件名。

答案 1 :(得分:1)

您可以使用key功能执行此任务:

>>> l = ['name_1_100_out.txt', 'name_1_10_out.txt', 'name_1_6_out.txt', 'name_1_5_out.txt', 'name_1_2_out.txt']
>>> sorted(l,key=lambda s: int(s.split('_')[2]))
['name_1_2_out.txt', 'name_1_5_out.txt', 'name_1_6_out.txt', 'name_1_10_out.txt', 'name_1_100_out.txt']

答案 2 :(得分:-1)

lista = ['2','3','5','8','4','6','1']
listb = [('2','3'),('5','8'),('4','6'),('1','9')]
listc = {'a':'3','b':'5','c':'9','d':'4','e':'2','f':'0'}
d = sorted(lista, key=lambda item:int(item), reverse=True)
e = sorted(listb, key=lambda item:int(item[0]) + int(item[1]), reverse=True)
f = sorted(listc.items(), key=lambda item:int(item[1]), reverse=True)
print(d)
print(e)
print(f)

输出:

['8', '6', '5', '4', '3', '2', '1']
[('5', '8'), ('4', '6'), ('1', '9'), ('2', '3')]
[('c', '9'), ('b', '5'), ('d', '4'), ('a', '3'), ('e', '2'), ('f', '0')]