我想按照第一个数字对这个字符串列表进行排序,最好在一行中使用正则表达式,但欢迎其他建议。我正试着用最快的方法做这件事。这是名单;
[
"10. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless I",
"11. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless J",
"12. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless K",
"13. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless L",
"14. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless M",
"15. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless N",
"16. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless O",
"17. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless P",
"18. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless Q",
"19. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless R",
"20. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless S",
"21. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless z",
"22. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless A",
"5. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless D",
"6. Command Mounting Refill Strips - Large Pack of 1 6 Strips E",
"7. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless F",
"8. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless G",
"9. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless H"
]这是我迄今尝试过的代码。
dirs = sorted(next(walk(self.rootDirectory))[1], key=lambda x: int(x[0]))但这是回来的;
[
"10. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless I",
"11. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless J",
"12. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless K",
"13. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless L",
"14. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless M",
"15. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless N",
"16. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless O",
"17. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless P",
"18. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless Q",
"19. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless R",
"20. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless S",
"21. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless z",
"22. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless A",
"5. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless D",
"6. Command Mounting Refill Strips - Large Pack of 1 6 Strips E",
"7. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless F",
"8. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless G",
"9. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless H"
]更新
我也可以有一个示例来对它进行排序,而不需要使用。性格。例如,"20 iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless S"
发布于 2017-10-16 14:38:52
在.上拆分后转换为int,以获取完整的数字,而不仅仅是第一个数字:
lst = next(walk(self.rootDirectory))[1]
dirs = sorted(lst, key=lambda x: int(x.split('.')[0]))当'.'不一定在字符串中时进行排序:
dirs = sorted(lst, key=lambda x: float(x.split()[0]))使用或不使用'.'。
发布于 2017-10-16 14:40:24
如果希望按数字字符串对列表进行排序,请考虑使用自然排序算法。
码
import re
def natural_key(string_):
return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', string_) if s]后一段代码是从这个所以贴中修改的,并假设每个字符串都被枚举,因此数字字符串是一个转换为数字的数字,可以是sorted。
iterable = [
"10. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless I",
"11. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless J",
"12. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless K",
"13. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless L",
"14. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless M",
"15. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless N",
"16. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless O",
"17. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless P",
"18. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless Q",
"19. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless R",
"20. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless S",
"21. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless z",
"22. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless A",
"5. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless D",
"6. Command Mounting Refill Strips - Large Pack of 1 6 Strips E",
"7. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless F",
"8. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless G",
"9. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless H"
]
sorted(iterable, key=natural_key)输出
['5. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless D',
'6. Command Mounting Refill Strips - Large Pack of 1 6 Strips E',
'7. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless F',
'8. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless G',
'9. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless H',
'10. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless I',
...]发布于 2017-10-16 15:13:28
l = <your-list>
import re
sorted(l, key=lambda x:int(re.match(r'(\d+)',x).groups()[0]))输出:
['5. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless D',
'6. Command Mounting Refill Strips - Large Pack of 1 6 Strips E',
'7. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless F',
'8. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless G',
'9. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless H',
'10. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless I',
'11. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless J',
'12. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless K',
'13. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless L',
'14. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless M',
'15. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless N',
'16. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless O',
'17. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless P',
'18. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless Q',
'19. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless R',
'20. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless S',
'21. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless z',
'22. iTOMA Radio Alarm Clock FM Digital Radio Clock Bedside Alarm Clock Wireless A']https://stackoverflow.com/questions/46772801
复制相似问题