我在按位置排序枚举列表时遇到了一些困难。
我搜索过其他帖子,我认为这可能是因为这些值没有转换为整数。
然而,我不确定在这种情况下如何做到这一点。
例如:
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