4 ms·
FWIW, the sort method (and sorted keyword) take a 'key' keyword, where you can pass a function to use to calculate the key to sort the sequence with. So in your
by herge 10y ago
FWIW, the sort method (and sorted keyword) take a 'key' keyword, where you can pass a function to use to calculate the key to sort the sequence with. So in your file11 case, you can do:
sorted(files, key=lambda x: int(x[4:])
, and it will do the right thing.
Although with natsort, you don't have to parse the actual strings yourself.
- daveguy 10y agoThat is a neat trick, but it would be incredibly brittle. Kids, don't try this at home!
- solaxun 10y agoPass in an re.match or re.search based function, i would imagine that would be powerful enough to meet most needs. import re x = ['foo12901','fooo900','fooooooo980090'] x =sorted(x,key = lambdax:int(re.search('\d+',x).group())) print(x)
- shoyer 10y ago+1 this is the right way to build a custom sorting function. The only thing worse than relying on ad-hoc heuristics for processing your data is relying on heuristics that somebody else maintains!