守候你守候我
您可以使用正则表达式来获取数字,然后首先对其进行排序,然后按基础字符串(例如,如果有两个坐标具有相同的数字)进行排序:import recoords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']coords.sort(key=lambda c: (re.search(r'\d+', c).group(0), c))print(coords)输出:['b150brown', '`154blue', 'a154blue', 'b154blue', 'c154blue', 'd154blue', '`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']
慕码人8056858
您可以使用c in '0123456789'或c.isdigit过滤掉非数字字符:>>> s = 'b150brown'>>> ''.join(c for c in s if c.isdigit())'150'>>> int(''.join(c for c in s if c.isdigit()))150然后使用它作为key参数list.sort:coords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']coords.sort(key=lambda s: int(''.join(c for c in s if c.isdigit())))print(coords)# ['b150brown', '`154blue', 'a154blue', 'b154blue', 'c154blue', 'd154blue', '`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']此外,当字符串具有相同的数字时,您可以通过按字典顺序对字符串进行排序来打破平局,正如Shash Sinha所建议的:coords = ['`154blue', '`155blue', 'a154blue', 'a155blue', 'b154blue', 'b155blue', 'c154blue', 'c155blue', 'd154blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown', 'b150brown']coords.sort(key=lambda s: (int(''.join(c for c in s if c.isdigit())), s))print(coords)# ['b150brown', '`154blue', 'a154blue', 'b154blue', 'c154blue', 'd154blue', '`155blue', 'a155blue', 'b155blue', 'c155blue', 'd155blue', 'e155blue', '`156brown', 'a156brown', 'a158brown']