按位置发布排序枚举列表



我在按位置排序枚举列表时遇到了一些困难。

我搜索过其他帖子,我认为这可能是因为这些值没有转换为整数。

然而,我不确定在这种情况下如何做到这一点。

例如:

lst = ['blue', 'red', 'green', 'black', 'yellow', 'orange', 'purple', 'white', 'grey', 'brown', 'violet']

然后我列举列表:

lst_pos = [f"{i}, {v}" for i, v in enumerate(lst)]

结果是:

>>> ['0, blue', '1, red', '2, green', '3, black', '4, yellow', '5, orange', '6, purple', '7, white', '8, grey', '9, brown', '10, violet']

然后我对lst_pos:进行排序

lst_sort = sorted(lst_pos, key = lambda x:x[0])

lstrongort的值为:

>>> ['0, blue', '1, red', '10, violet', '2, green', '3, black', '4, yellow', '5, orange', '6, purple', '7, white', '8, grey', '9, brown']

这个问题是violet出现在green之前。

如果这个解释很长,我们深表歉意,但我们非常感谢您的帮助!

创建元组列表而不是字符串列表的一种方法。创建lst_pos的列表理解变成:

lst_pos = [(i, v) for i, v in enumerate(lst)]
lst_sort = sorted(lst_pos, key = lambda x:x[0])
lst_sort
[(0, 'blue'),
(1, 'red'),
(2, 'green'),
(3, 'black'),
(4, 'yellow'),
(5, 'orange'),
(6, 'purple'),
(7, 'white'),
(8, 'grey'),
(9, 'brown'),
(10, 'violet')]

lst:开始

lst =  ['0, blue', '1, red', '10, violet', '2, green', '3, black', '4, yellow', '5, orange', '6, purple', '7, white', '8, grey', '9, brown']

按字符串的第一个元素(即lst的每个元素(排序:

lst_sort = sorted(lst, key = lambda x: int(x.split(', ')[0]))

结果:

['0, blue',
'1, red',
'2, green',
'3, black',
'4, yellow',
'5, orange',
'6, purple',
'7, white',
'8, grey',
'9, brown',
'10, violet']

请注意,字符串的第一个元素需要转换为int,以确保排序顺序正确。

您可以插入索引2x。一次作为字符串,第二次作为整数。创建一个以索引开头的元组,第二个值就是字符串。然后按照存储在元组x[0]中的整数索引进行排序。排序后删除整数索引。通过这种方式,您可以对字符串进行排序。

lst = ['blue', 'red', 'green', 'black', 'yellow', 'orange', 'purple', 'white', 'grey', 'brown', 'violet']
lst = [(i, f"{i}, {v}") for i, v in enumerate(lst)]
lst_sort = sorted(lst, key = lambda x:x[0])
lst_sort = [x[1] for x in lst]

看起来键没有按数字排序,这就是为什么10出现在1之后但在2之前,因为它读取1,1-0,2

最新更新