Python 根据列表中的特定部分对列表进行排序

Python 根据列表中的特定部分对列表进行排序,python,list,sorting,Python,List,Sorting,我有以下格式的列表: Apple, Orange[123 431]43351 Banana, Cherry[141 421]23423 Coconut, Mango[23 12312]232342 .... .... 我想根据括号']'后的数字对列表进行排序。 输出应为: Banana, Cherry[141 421]23423 Apple, Orange[123 431]43351 Coconut, Mango[23 12312]232342 我尝试使用以下方法对列表进行排序: LIS

我有以下格式的列表:

Apple, Orange[123 431]43351
Banana, Cherry[141 421]23423
Coconut, Mango[23 12312]232342
....
....
我想根据括号']'后的数字对列表进行排序。 输出应为:

Banana, Cherry[141 421]23423 
Apple, Orange[123 431]43351 
Coconut, Mango[23 12312]232342
我尝试使用以下方法对列表进行排序:

LIST.sort(key = lambda x: x.split()[1])
for item in LIST:
    print(item)
我可以通过以下方式找到最后一个号码: 但是我不能把它分类

for item in LIST:
    bracket_index = item.find("]")
    end_of_line = item[bracket_index + 1:]
    if bracket_index != -1:
        print(end_of_line)

你的清单的格式是什么?它是元组列表还是字符串列表?这项工作:

a = ['Apple, Orange[123 431]43351',
'Banana, Cherry[141 421]23423',
'Coconut, Mango[23 12312]232342']

a.sort(key = lambda el: el.split(']')[1])
print(a)

Output:
 ['Coconut, Mango[23 12312]232342',
 'Banana, Cherry[141 421]23423',
 'Apple, Orange[123 431]43351']
如果它是一个字符串对列表,那么您应该使用
key=lambda el:el[1].split(']')[1]
如下所示:

a = [('Apple', 'Orange[123 431]43351'),
('Banana', 'Cherry[141 421]23423'),
('Coconut',' Mango[23 12312]232342')]

a.sort(key = lambda el: el[1].split(']')[1])
print(a)

Output:
[('Coconut', ' Mango[23 12312]232342'),
 ('Banana', 'Cherry[141 421]23423'),
 ('Apple', 'Orange[123 431]43351')]

你的清单的格式是什么?它是元组列表还是字符串列表?这项工作:

a = ['Apple, Orange[123 431]43351',
'Banana, Cherry[141 421]23423',
'Coconut, Mango[23 12312]232342']

a.sort(key = lambda el: el.split(']')[1])
print(a)

Output:
 ['Coconut, Mango[23 12312]232342',
 'Banana, Cherry[141 421]23423',
 'Apple, Orange[123 431]43351']
如果它是一个字符串对列表,那么您应该使用
key=lambda el:el[1].split(']')[1]
如下所示:

a = [('Apple', 'Orange[123 431]43351'),
('Banana', 'Cherry[141 421]23423'),
('Coconut',' Mango[23 12312]232342')]

a.sort(key = lambda el: el[1].split(']')[1])
print(a)

Output:
[('Coconut', ' Mango[23 12312]232342'),
 ('Banana', 'Cherry[141 421]23423'),
 ('Apple', 'Orange[123 431]43351')]

您可以接受@Psidom的建议:

LIST.sort(key=lambda x: int(x.split(']')[1]))
请注意使用
int()
来确保排序是以数字方式完成的,而不是通过字符串比较来完成的(比较是延迟完成的;也就是说,
'4321'
由于
'4'>'2'
而被认为比
'20000000'
大)


完整示例:

LIST = [
    'Apple, Orange[123 431]43351',
    'Banana, Cherry[141 421]23423',
    'Coconut, Mango[23 12312]232342'
]

LIST.sort(key=lambda x: int(x.split(']')[1]))
print(LIST)

更好的方法是首先解析字符串。例如:

from collections import namedtuple
import re

FruitTuple = namedtuple('FruitTuple', ['fruit', 'color', 'num1', 'num2', 'num3'])

unparsed_list = [
    'Apple, Orange[123 431]43351',
    'Banana, Cherry[141 421]23423',
    'Coconut, Mango[23 12312]232342'
]

split_list = [re.search('(\\w+), (\\w+)\\[(\\d+) (\\d+)\\](\\d+)', x).groups() for x in unparsed_list]
fruit_list = [FruitTuple(*x) for x in split_list]
fruit_list.sort(key=lambda x: int(x.num2))

print(fruit_list)
产生:

[水果组(水果='香蕉',颜色='樱桃',num1='141',num2='421',num3='23423'),水果组(水果='苹果',颜色='橙色',num1='123',num2='431',num3='43351'),水果组(水果='椰子',颜色='芒果',num1='23',num2='12312',num3='2323422')]


您可以接受@Psidom的建议:

LIST.sort(key=lambda x: int(x.split(']')[1]))
请注意使用
int()
来确保排序是以数字方式完成的,而不是通过字符串比较来完成的(比较是延迟完成的;也就是说,
'4321'
由于
'4'>'2'
而被认为比
'20000000'
大)


完整示例:

LIST = [
    'Apple, Orange[123 431]43351',
    'Banana, Cherry[141 421]23423',
    'Coconut, Mango[23 12312]232342'
]

LIST.sort(key=lambda x: int(x.split(']')[1]))
print(LIST)

更好的方法是首先解析字符串。例如:

from collections import namedtuple
import re

FruitTuple = namedtuple('FruitTuple', ['fruit', 'color', 'num1', 'num2', 'num3'])

unparsed_list = [
    'Apple, Orange[123 431]43351',
    'Banana, Cherry[141 421]23423',
    'Coconut, Mango[23 12312]232342'
]

split_list = [re.search('(\\w+), (\\w+)\\[(\\d+) (\\d+)\\](\\d+)', x).groups() for x in unparsed_list]
fruit_list = [FruitTuple(*x) for x in split_list]
fruit_list.sort(key=lambda x: int(x.num2))

print(fruit_list)
产生:

[水果组(水果='香蕉',颜色='樱桃',num1='141',num2='421',num3='23423'),水果组(水果='苹果',颜色='橙色',num1='123',num2='431',num3='43351'),水果组(水果='椰子',颜色='芒果',num1='23',num2='12312',num3='2323422')]


LIST.sort(key=lambda x:int(x.split(']')[1]))
?请注意,所有大写通常用于常量,也就是不变的变量。如果要对列表进行排序,它可能不属于该类别。
list.sort(key=lambda x:int(x.split(']')[1]))
?请注意,所有大写通常用于常量,即不变的变量。如果您对列表进行排序,它可能不属于该类别。我的列表的格式为:list=['Apple,Orange[123 431]43351','bana,Cherry[141 421]23423','coil,Mango[23 12312]2323422']我希望输出为:香蕉,Cherry[141 421]23423苹果,Orange[123 431]43351椰子,芒果[23 12312]232342@VaibhavBorkar这正是我在第一个回答中提到的格式。我的列表的格式是:list=['Apple,Orange[123 431]43351','bana,Cherry[141 421]23423','cocoil,Mango[23 12312]2323422']我希望输出是:Banana,Cherry[141 421]23423苹果,Orange[123 431]43351椰子,芒果[23 12312]232342@VaibhavBorkar这正是我在第一个答案中所提到的格式。字符串比较只考虑前几个字符并不是真的。这取决于字符串的相似程度。当比较
this
thin
时,将比较所有字符。我得到了语句的语法错误(key=lambda x:)对不起,我忘记了
']'
我得到了错误“无类型对象无属性组”我发布了一个“完整示例”字符串比较只考虑前几个字符并不是真的。这取决于字符串的相似程度。当比较
this
thin
时,将比较所有字符。我得到了语句的语法错误(key=lambda x:)对不起,我忘记了
']'
我得到了错误“无类型对象无属性组”我发布了一个“完整示例”。