2014-07-08 19 views
5

Tôi có một danh sách các chuỗi mà tôi muốn sắp xếp.Sắp xếp danh sách các chuỗi và số địa điểm sau các chữ cái trong python

Theo mặc định, các chữ cái có giá trị lớn hơn số (hoặc số chuỗi), các chữ cái này đặt chúng cuối cùng trong danh sách được sắp xếp.

>>> 'a' > '1' 
True 
>>> 'a' > 1 
True 

Tôi muốn có thể đặt tất cả các chuỗi bắt đầu bằng một số ở cuối danh sách.

Ví dụ:

danh sách Unsorted:

['big', 'apple', '42nd street', '25th of May', 'subway'] 

Python của phân loại mặc định:

['25th of May', '42nd street', 'apple', 'big', 'subway'] 

yêu cầu sắp xếp:

Trả lời

10
>>> a = ['big', 'apple', '42nd street', '25th of May', 'subway'] 
>>> sorted(a, key=lambda x: (x[0].isdigit(), x)) 
['apple', 'big', 'subway', '25th of May', '42nd street'] 

Chức năng sắp xếp của Python lấy tham số key tùy chọn, cho phép bạn chỉ định một hàm được áp dụng trước khi sắp xếp. Tuple được sắp xếp theo phần tử đầu tiên của chúng, và sau đó là phần tử thứ hai của chúng, v.v.

Bạn có thể đọc thêm về cách sắp xếp here.

+5

Điều này thực hiện chính xác những gì mà OP yêu cầu. Đó là giá trị chỉ ra rằng mặc dù điều này sẽ không làm [phân loại tự nhiên] (http://stackoverflow.com/questions/4836710/does-python-have-a-built-in-function-for-string-natural-sort) cho số chuỗi, ''2'' sẽ được liệt kê sau' '11''. –

+0

@LukasGraf Điểm tốt. – grc

+0

+1. Trong trường hợp danh sách của bạn bao gồm các số nguyên, bọc 'x' trong' str() ':' được sắp xếp (a, key = lambda x: (str (x) [0] .isdigit(), str (x)) ' –

Các vấn đề liên quan