2017-06-29 31 views
13

Làm cách nào để sắp xếp các số nguyên theo thứ tự abc? Như thế này:Cách sắp xếp các số nguyên theo thứ tự abc

integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0] 

in như thế này trên Python console

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 

Tôi đã cố gắng này

def sort_integers(integers): 
    return sorted(integers) 

nhưng tôi đoán bạn phải làm điều đó theo cách này

def sort_integers(integers): 
    return sorted(integers, key = lambda.......) 

Tôi không biết phải làm gì nghi thức sau lambda?

Trả lời

27
sorted(integers, key=str) 

-> 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 

Giải thích: str là hàm sẽ chuyển số nguyên thành chuỗi. Kể từ khi sorted sắp xếp chuỗi theo thứ tự bảng chữ cái theo mặc định, điều này thực hiện chính xác những gì bạn đã yêu cầu.

11

Bạn chỉ có thể sử dụng str như key:

sorted(integers,key=str)

Vì vậy, đây cho mỗi phần tử, chức năng str được gọi, chuyển đổi int thành một ing str. Điều đó không phải là ngoạn mục. Nhưng so sánh của các chuỗi là khác nhau: nó sắp xếp theo từ điển.

>>> sorted([0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222],key=str) 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
4

Nếu bạn muốn sắp xếp các số nguyên của bạn tự từ điển như thể chúng là chuỗi, bạn có thể nói với Python đối xử với họ như dây đàn trong khi sắp xếp:

>>> integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0] 
>>> sorted(integers, key=lambda n: str(n)) 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
>>> 

Nhưng bạn thực sự thậm chí không cần phải có phần lambda n: .... Bạn có thể chỉ cần chuyển hàm str làm key và Python sẽ biết phải làm gì. gọi str(n) nơi n là mỗi phần tử trong danh sách của bạn:

>>> sorted(integers, key=str) 
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
>>> 

Vì vậy, chức năng của bạn sẽ kết thúc hạnh phúc:

def sort_integers(integers): 
    return sorted(integers, key=str) 
0

này sẽ làm việc

list(map(int, (sorted(str(i) for i in integers)))) 

đầu ra:

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222] 
+1

Nhưng anh ấy muốn danh sách kết quả dưới dạng số nguyên. –

+1

cảm ơn, quên điều đó. cập nhật – Alter

+1

Cuộc gọi được sắp xếp của bạn không cần phải làm những gì nó đang làm. Tương tự như phần còn lại của câu trả lời, chỉ cần chuyển danh sách của bạn với một đối số chính. – idjaw

0

Thử một số Most Significant Digit Radix Sort. Điều này tránh phải chuyển đổi các số nguyên thành chuỗi, nhưng khó thực hiện hơn trừ khi bạn sử dụng một thư viện hoặc một số tiền khác là code.

+1

Trong khi điều này về mặt lý thuyết có thể trả lời câu hỏi, [nó sẽ là thích hợp hơn] (// meta.stackoverflow.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. –

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