Hướng dẫn python sort list numerically - danh sách sắp xếp python theo số

175

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi biết rằng điều này nghe có vẻ tầm thường nhưng tôi không nhận ra rằng chức năng

['1', '10', '2', '200', '22', '23', '3', '4']
8 của Python thật kỳ lạ. Tôi có một danh sách các "số" thực sự ở dạng chuỗi, vì vậy trước tiên tôi chuyển đổi chúng thành ints, sau đó thử một loại.

list1=["1","10","3","22","23","4","2","200"]
for item in list1:
    item=int(item)

list1.sort()
print list1

Đưa cho tôi:

['1', '10', '2', '200', '22', '23', '3', '4']

Điều tôi muốn là

['1','2','3','4','10','22','23','200']

Tôi đã tìm kiếm một số thuật toán liên quan đến việc sắp xếp các bộ số, nhưng những thuật toán tôi tìm thấy tất cả liên quan đến việc sắp xếp các bộ chữ và số.

Tôi biết đây có lẽ là một vấn đề không có trí tuệ nhưng Google và sách giáo khoa của tôi không cung cấp bất cứ điều gì hữu ích hơn hoặc ít hơn hàm

['1', '10', '2', '200', '22', '23', '3', '4']
9.

Hướng dẫn python sort list numerically - danh sách sắp xếp python theo số

Hỏi ngày 6 tháng 8 năm 2010 lúc 17:17Aug 6, 2010 at 17:17

4

Bạn chưa thực sự chuyển đổi chuỗi của mình thành INT. Hay đúng hơn, bạn đã làm, nhưng sau đó bạn đã không làm bất cứ điều gì với kết quả. Những gì bạn muốn là:

list1 = ["1","10","3","22","23","4","2","200"]
list1 = [int(x) for x in list1]
list1.sort()

Nếu vì một lý do nào đó, bạn cần giữ các chuỗi thay vì INT (thường là một ý tưởng tồi, nhưng có lẽ bạn cần bảo tồn các số không hàng đầu hoặc một cái gì đó), bạn có thể sử dụng một chức năng chính.

['1','2','3','4','10','22','23','200']
0 có một tham số được đặt tên,
['1','2','3','4','10','22','23','200']
1, là một hàm được gọi trên mỗi phần tử trước khi nó được so sánh. Các giá trị trả về của chức năng chính được so sánh thay vì so sánh trực tiếp các yếu tố danh sách:

list1 = ["1","10","3","22","23","4","2","200"]
# call int(x) on each element before comparing it
list1.sort(key=int)

user2357112

243K26 Huy hiệu vàng396 Huy hiệu bạc474 Huy hiệu đồng26 gold badges396 silver badges474 bronze badges

Đã trả lời ngày 6 tháng 8 năm 2010 lúc 17:22Aug 6, 2010 at 17:22

Seamus Campbellseamus CampbellSeamus Campbell

17.6K3 Huy hiệu vàng51 Huy hiệu bạc60 Huy hiệu Đồng3 gold badges51 silver badges60 bronze badges

4

Tôi đã tiếp cận cùng một vấn đề ngày hôm qua và tìm thấy một mô -đun gọi là Natsort, điều này giải quyết vấn đề của bạn. Sử dụng:

from natsort import natsorted # pip install natsort

# Example list of strings
a = ['1', '10', '2', '3', '11']

[In]  sorted(a)
[Out] ['1', '10', '11', '2', '3']

[In]  natsorted(a)
[Out] ['1', '2', '3', '10', '11']

# Your array may contain strings
[In]  natsorted(['string11', 'string3', 'string1', 'string10', 'string100'])
[Out] ['string1', 'string3', 'string10', 'string11', 'string100']

Nó cũng hoạt động cho từ điển tương đương với

['1','2','3','4','10','22','23','200']
2.

Hướng dẫn python sort list numerically - danh sách sắp xếp python theo số

Đã trả lời ngày 23 tháng 5 năm 2018 lúc 18:00May 23, 2018 at 18:00

lrsplrsplrsp

9937 Huy hiệu bạc17 Huy hiệu đồng7 silver badges17 bronze badges

0

Bạn có thể chuyển một hàm cho tham số

['1','2','3','4','10','22','23','200']
1 cho phương thức
['1','2','3','4','10','22','23','200']
4. Với điều này, hệ thống sẽ sắp xếp theo phím (x) thay vì x.

list1.sort(key=int)

BTW, để chuyển đổi danh sách thành số nguyên vĩnh viễn, sử dụng hàm

['1','2','3','4','10','22','23','200']
5

list1 = list(map(int, list1))   # you don't need to call list() in Python 2.x

hoặc danh sách hiểu

list1 = [int(x) for x in list1]

Đã trả lời ngày 6 tháng 8 năm 2010 lúc 17:18Aug 6, 2010 at 17:18

Kennytmkennytmkennytm

499K101 Huy hiệu vàng1063 Huy hiệu bạc995 Huy hiệu Đồng101 gold badges1063 silver badges995 bronze badges

1

Trong trường hợp bạn muốn sử dụng chức năng

['1','2','3','4','10','22','23','200']
6:
['1','2','3','4','10','22','23','200']
7

Nó trả về một danh sách sắp xếp mới.

Hướng dẫn python sort list numerically - danh sách sắp xếp python theo số

Đã trả lời ngày 28 tháng 12 năm 2012 lúc 18:28Dec 28, 2012 at 18:28

Syamsyamsyam

5426 Huy hiệu bạc15 Huy hiệu Đồng6 silver badges15 bronze badges

1

Bạn cũng có thể dùng:

import re

def sort_human(l):
    convert = lambda text: float(text) if text.isdigit() else text
    alphanum = lambda key: [convert(c) for c in re.split('([-+]?[0-9]*\.?[0-9]*)', key)]
    l.sort(key=alphanum)
    return l

Điều này rất giống với những thứ khác mà bạn có thể tìm thấy trên internet nhưng cũng hoạt động cho các chữ số như

['1','2','3','4','10','22','23','200']
8.

Georgy

11K7 Huy hiệu vàng62 Huy hiệu bạc68 Huy hiệu Đồng7 gold badges62 silver badges68 bronze badges

Đã trả lời ngày 14 tháng 10 năm 2016 lúc 9:23Oct 14, 2016 at 9:23

JulianjulianJulian

3552 Huy hiệu bạc9 Huy hiệu Đồng2 silver badges9 bronze badges

1

Sắp xếp của Python không kỳ lạ. Chỉ là mã này:

['1', '10', '2', '200', '22', '23', '3', '4']
0

Không làm những gì bạn nghĩ là -

['1','2','3','4','10','22','23','200']
9 không được thay thế trở lại vào danh sách, nó chỉ đơn giản là bị vứt đi.

Dù sao, giải pháp chính xác là sử dụng

list1 = ["1","10","3","22","23","4","2","200"]
list1 = [int(x) for x in list1]
list1.sort()
0 như những người khác đã chỉ cho bạn.

Đã trả lời ngày 6 tháng 8 năm 2010 lúc 17:22Aug 6, 2010 at 17:22

Seamus Campbellseamus CampbellDaniel Roseman

17.6K3 Huy hiệu vàng51 Huy hiệu bạc60 Huy hiệu Đồng61 gold badges842 silver badges854 bronze badges

0

Tôi đã tiếp cận cùng một vấn đề ngày hôm qua và tìm thấy một mô -đun gọi là Natsort, điều này giải quyết vấn đề của bạn. Sử dụng:'s answer doesn't work on Python 2.x.

Nó cũng hoạt động cho từ điển tương đương với

['1','2','3','4','10','22','23','200']
2.

Hướng dẫn python sort list numerically - danh sách sắp xếp python theo số

Đã trả lời ngày 23 tháng 5 năm 2018 lúc 18:00

lrsplrsp8 gold badges37 silver badges54 bronze badges

9937 Huy hiệu bạc17 Huy hiệu đồngApr 22, 2017 at 7:41

Bạn có thể chuyển một hàm cho tham số

['1','2','3','4','10','22','23','200']
1 cho phương thức
['1','2','3','4','10','22','23','200']
4. Với điều này, hệ thống sẽ sắp xếp theo phím (x) thay vì x.

BTW, để chuyển đổi danh sách thành số nguyên vĩnh viễn, sử dụng hàm

['1','2','3','4','10','22','23','200']
5

['1', '10', '2', '200', '22', '23', '3', '4']
1

output:

['1', '10', '2', '200', '22', '23', '3', '4']
2

hoặc danh sách hiểuOct 13, 2018 at 8:55

Đã trả lời ngày 6 tháng 8 năm 2010 lúc 17:18Mavia

Kennytmkennytm1 silver badge6 bronze badges

499K101 Huy hiệu vàng1063 Huy hiệu bạc995 Huy hiệu Đồng

Trong trường hợp bạn muốn sử dụng chức năng

['1','2','3','4','10','22','23','200']
6:
['1','2','3','4','10','22','23','200']
7

Nó trả về một danh sách sắp xếp mới.

list1 = ["1","10","3","22","23","4","2","200"]
list1 = [int(x) for x in list1]
list1.sort()
3

Đã trả lời ngày 28 tháng 12 năm 2012 lúc 18:28

list1 = ["1","10","3","22","23","4","2","200"]
list1 = [int(x) for x in list1]
list1.sort()
4

Syamsyam

5426 Huy hiệu bạc15 Huy hiệu Đồng

['1', '10', '2', '200', '22', '23', '3', '4']
3

Hướng dẫn python sort list numerically - danh sách sắp xếp python theo số

Bạn cũng có thể dùng:

Điều này rất giống với những thứ khác mà bạn có thể tìm thấy trên internet nhưng cũng hoạt động cho các chữ số như

['1','2','3','4','10','22','23','200']
8.5 gold badges32 silver badges63 bronze badges

GeorgyDec 6, 2013 at 0:15

11K7 Huy hiệu vàng62 Huy hiệu bạc68 Huy hiệu Đồngclint

Đã trả lời ngày 14 tháng 10 năm 2016 lúc 9:231 bronze badge

3

Julianjulian

Đã trả lời ngày 20 tháng 11 năm 2019 lúc 0:48Nov 20, 2019 at 0:48

Hướng dẫn python sort list numerically - danh sách sắp xếp python theo số

Gerry Pgerry pGerry P

7.0713 huy hiệu vàng9 Huy hiệu bạc20 Huy hiệu đồng3 gold badges9 silver badges20 bronze badges

Nếu bạn muốn sử dụng các chuỗi của các số tốt hơn hãy lấy một danh sách khác như trong mã của tôi, nó sẽ hoạt động tốt.

['1', '10', '2', '200', '22', '23', '3', '4']
4

Georgy

11K7 Huy hiệu vàng62 Huy hiệu bạc68 Huy hiệu Đồng7 gold badges62 silver badges68 bronze badges

Đã trả lời ngày 28 tháng 9 năm 2018 lúc 10:52Sep 28, 2018 at 10:52

Cách đơn giản để sắp xếp một danh sách số

['1', '10', '2', '200', '22', '23', '3', '4']
5

Đã trả lời ngày 4 tháng 9 năm 2018 lúc 5:10Sep 4, 2018 at 5:10

Hướng dẫn python sort list numerically - danh sách sắp xếp python theo số

Sayaloksayaloksayalok

8843 Huy hiệu vàng16 Huy hiệu bạc 30 Huy hiệu Đồng3 gold badges16 silver badges30 bronze badges

0

Có thể không phải là Python tốt nhất, mà là đối với các danh sách chuỗi như ['1', '1.0', '2.0', '2', '1.1', '1.10', '1.11', '1.2', '7', ','3 ',' 5 '] với mục tiêu dự kiến [' 1 ',' 1.0 ',' 1.1 ',' 1.2 ',' 1.10 ',' 1.11 ',' 2 ',' 2.0 ',' 3 ',' 5',' 7 '] đã giúp tôi ...

['1', '10', '2', '200', '22', '23', '3', '4']
6

Đã trả lời ngày 23 tháng 10 năm 2020 lúc 10:32Oct 23, 2020 at 10:32

1

['1', '10', '2', '200', '22', '23', '3', '4']
7

Điều này làm việc cho tôi bằng cách sử dụng Python phiên bản 3, mặc dù nó không ở phiên bản 2.

Manish Kumar

15K5 Huy hiệu vàng18 Huy hiệu bạc27 Huy hiệu đồng5 gold badges18 silver badges27 bronze badges

Đã trả lời ngày 19 tháng 7 năm 2016 lúc 10:56Jul 19, 2016 at 10:56

1