Hướng dẫn how do you sort a list in alphanumeric order python? - làm thế nào để bạn sắp xếp một danh sách trong python thứ tự chữ và số?

Tôi có một bộ

set(['booklet', '4 sheets', '48 sheets', '12 sheets'])

Sau khi phân loại, tôi muốn nó trông giống như

4 sheets,
12 sheets,
48 sheets,
booklet

Xin vui lòng bất kỳ ý tưởng nào

Hướng dẫn how do you sort a list in alphanumeric order python? - làm thế nào để bạn sắp xếp một danh sách trong python thứ tự chữ và số?

Silentghost

295K64 Huy hiệu vàng302 Huy hiệu bạc291 Huy hiệu Đồng64 gold badges302 silver badges291 bronze badges

Hỏi ngày 19 tháng 4 năm 2010 lúc 16:21Apr 19, 2010 at 16:21

Jeff Atwood nói về loại tự nhiên và đưa ra một ví dụ về một cách để làm điều đó trong Python. Đây là biến thể của tôi về nó:

import re 

def sorted_nicely( l ): 
    """ Sort the given iterable in the way that humans expect.""" 
    convert = lambda text: int(text) if text.isdigit() else text 
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
    return sorted(l, key = alphanum_key)

Sử dụng như thế này:

s = set(['booklet', '4 sheets', '48 sheets', '12 sheets'])
for x in sorted_nicely(s):
    print(x)

Output:

4 sheets
12 sheets
48 sheets
booklet

Một lợi thế của phương pháp này là nó không chỉ hoạt động khi các chuỗi được phân tách bằng không gian. Nó cũng sẽ hoạt động cho các dấu phân cách khác như khoảng thời gian trong số phiên bản (ví dụ 1.9.1 xuất hiện trước 1.10.0).

Đã trả lời ngày 19 tháng 4 năm 2010 lúc 16:31Apr 19, 2010 at 16:31

Mark Byersmark ByersMark Byers

785K188 Huy hiệu vàng1552 Huy hiệu bạc1440 Huy hiệu đồng188 gold badges1552 silver badges1440 bronze badges

4

Ngắn và ngọt:

sorted(data, key=lambda item: (int(item.partition(' ')[0])
                               if item[0].isdigit() else float('inf'), item))

Phiên bản này:

  • Hoạt động trong Python 2 và Python 3, bởi vì:
    • Nó không cho rằng bạn so sánh các chuỗi và số nguyên (không hoạt động trong Python 3)
    • Nó không sử dụng tham số
      4 sheets,
      12 sheets,
      48 sheets,
      booklet
      
      8 cho
      4 sheets,
      12 sheets,
      48 sheets,
      booklet
      
      9 (không tồn tại trong Python 3)
  • Sẽ sắp xếp trên phần chuỗi nếu số lượng bằng nhau

Nếu bạn muốn đầu ra in chính xác như được mô tả trong ví dụ của bạn, thì:

data = set(['booklet', '4 sheets', '48 sheets', '12 sheets'])
r = sorted(data, key=lambda item: (int(item.partition(' ')[0])
                                   if item[0].isdigit() else float('inf'), item))
print ',\n'.join(r)

Đã trả lời ngày 19 tháng 4 năm 2010 lúc 17:32Apr 19, 2010 at 17:32

Daniel Stutzbachdaniel StutzbachDaniel Stutzbach

71.8K17 Huy hiệu vàng85 Huy hiệu bạc76 Huy hiệu đồng17 gold badges85 silver badges76 bronze badges

3

Bạn nên kiểm tra thư viện bên thứ ba Natsort. Thuật toán của nó là chung vì vậy nó sẽ hoạt động cho hầu hết các đầu vào.

>>> import natsort
>>> your_list = set(['booklet', '4 sheets', '48 sheets', '12 sheets'])
>>> print ',\n'.join(natsort.natsorted(your_list))
4 sheets,
12 sheets,
48 sheets,
booklet

Đã trả lời ngày 17 tháng 7 năm 2014 lúc 22:01Jul 17, 2014 at 22:01

SethmmortonsethmmortonSethMMorton

42,8K12 Huy hiệu vàng64 Huy hiệu bạc82 Huy hiệu đồng12 gold badges64 silver badges82 bronze badges

0

Một cách đơn giản là phân chia các chuỗi thành các bộ phận số và các bộ phận không phải là số và sử dụng thứ tự sắp xếp python tuple để sắp xếp các chuỗi.

import re
tokenize = re.compile(r'(\d+)|(\D+)').findall
def natural_sortkey(string):          
    return tuple(int(num) if num else alpha for num, alpha in tokenize(string))

sorted(my_set, key=natural_sortkey)

Đã trả lời ngày 19 tháng 4 năm 2010 lúc 16:37Apr 19, 2010 at 16:37

Kiến aasManants aasmaAnts Aasma

51.6K15 Huy hiệu vàng88 Huy hiệu bạc93 Huy hiệu đồng15 gold badges88 silver badges93 bronze badges

Có ý kiến ​​cho rằng tôi đăng lại câu trả lời này ở đây vì nó cũng hoạt động tốt cho trường hợp này

from itertools import groupby
def keyfunc(s):
    return [int(''.join(g)) if k else ''.join(g) for k, g in groupby(s, str.isdigit)]

sorted(my_list, key=keyfunc)

Thử nghiệm:

4 sheets,
12 sheets,
48 sheets,
booklet
0

Đối với python3, bạn cần phải sửa đổi nó một chút (phiên bản này cũng hoạt động tốt trong python2)

4 sheets,
12 sheets,
48 sheets,
booklet
1

Đã trả lời ngày 6 tháng 6 năm 2013 lúc 7:35Jun 6, 2013 at 7:35

Hướng dẫn how do you sort a list in alphanumeric order python? - làm thế nào để bạn sắp xếp một danh sách trong python thứ tự chữ và số?

John La Rooyjohn La RooyJohn La Rooy

Phù bằng vàng 287K5151 gold badges359 silver badges500 bronze badges

Câu trả lời chung để sắp xếp bất kỳ số nào ở bất kỳ vị trí nào trong một loạt các chuỗi. Làm việc với Python 2 & 3.

4 sheets,
12 sheets,
48 sheets,
booklet
2

Sample:

4 sheets,
12 sheets,
48 sheets,
booklet
3

Một phần của câu trả lời là từ đó

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

Hướng dẫn how do you sort a list in alphanumeric order python? - làm thế nào để bạn sắp xếp một danh sách trong python thứ tự chữ và số?

Le droidle droidLe Droid

4.3242 Huy hiệu vàng34 Huy hiệu bạc32 Huy hiệu Đồng2 gold badges34 silver badges32 bronze badges

4 sheets,
12 sheets,
48 sheets,
booklet
4

Đã trả lời ngày 19 tháng 4 năm 2010 lúc 16:25Apr 19, 2010 at 16:25

SilentghostsilentghostSilentGhost

295K64 Huy hiệu vàng302 Huy hiệu bạc291 Huy hiệu Đồng64 gold badges302 silver badges291 bronze badges

Dựa trên câu trả lời của SilentGhost:

4 sheets,
12 sheets,
48 sheets,
booklet
5

Đã trả lời ngày 19 tháng 4 năm 2010 lúc 16:31Apr 19, 2010 at 16:31

Mark Byersmark Byers

Đã trả lời ngày 19 tháng 4 năm 2010 lúc 16:25Apr 19, 2010 at 16:25

SilentghostsilentghostRakis

Dựa trên câu trả lời của SilentGhost:23 silver badges25 bronze badges

3

Các bộ vốn không được đặt hàng. Bạn sẽ cần tạo một danh sách với cùng một nội dung và sắp xếp điều đó.

4 sheets,
12 sheets,
48 sheets,
booklet
6

Rakisrakis

7.68923 Huy hiệu bạc25 Huy hiệu đồngOct 22, 2013 at 16:11

0

4 sheets,
12 sheets,
48 sheets,
booklet
7

Đối với những người bị mắc kẹt với phiên bản Python trước 2.4, không có chức năng

import re 

def sorted_nicely( l ): 
    """ Sort the given iterable in the way that humans expect.""" 
    convert = lambda text: int(text) if text.isdigit() else text 
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
    return sorted(l, key = alphanum_key)
0 tuyệt vời, một cách nhanh chóng để sắp xếp các bộ là:Apr 1, 2021 at 17:23

Điều này không trả lời câu hỏi cụ thể ở trên (

import re 

def sorted_nicely( l ): 
    """ Sort the given iterable in the way that humans expect.""" 
    convert = lambda text: int(text) if text.isdigit() else text 
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
    return sorted(l, key = alphanum_key)
1 sẽ đến trước
import re 

def sorted_nicely( l ): 
    """ Sort the given iterable in the way that humans expect.""" 
    convert = lambda text: int(text) if text.isdigit() else text 
    alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 
    return sorted(l, key = alphanum_key)
2), nhưng nó có thể hữu ích cho những người đến từ Google.tldr

Đã trả lời ngày 22 tháng 10 năm 2013 lúc 16:113 bronze badges

Làm cách nào để sắp xếp một danh sách theo thứ tự bảng chữ cái trong Python?

Trong Python, việc sắp xếp một danh sách theo thứ tự bảng chữ cái cũng dễ dàng như chuyển danh sách các chuỗi cho phương thức Sắp xếp (). Các chuỗi được sắp xếp theo thứ tự bảng chữ cái dựa trên chữ cái đầu tiên của chúng (A-Z).passing a list of strings to the sorted() method. Strings are sorted in alphabetical order based on their first letter (A-Z).

Làm thế nào để bạn sắp xếp một thứ tự chữ và số?

Đặt hàng chữ và số được thực hiện bằng cách sử dụng thứ tự sắp xếp ngôn ngữ hiện tại trên máy khách theo định nghĩa của hệ điều hành (nghĩa là Windows).Người dùng yêu cầu sắp xếp bằng cách nhấp vào tiêu đề cột.Một lưới phải có các tiêu đề cột để được người dùng sắp xếp.using the current language sort order on the client machine as defined by the operating system (i.e. Windows). The user requests the sort by clicking on the column header. A grid must have column headings in order to be sorted by the user.

Làm thế nào để bạn sắp xếp các chuỗi chữ và số?

Bạn nên chia dây trong hai đầu tiên;Phần khác là phần số nguyên và phần còn lại là phần chuỗi.....
Phân tích số nguyên từ chuỗi và so sánh nó trước khi so sánh phần còn lại của chuỗi.....
Chuỗi có thể ở bất kỳ định dạng nào - ví dụ: 1, 2 khác 2, 1 Một số 2 khác 3, ....

Làm thế nào để bạn sắp xếp một danh sách theo bảng chữ cái ngược trong Python?

Danh sách Python sắp xếp theo thứ tự bảng chữ cái.Bạn có thể đảo ngược thứ tự của danh sách bằng cách sử dụng từ khóa đảo ngược.Đặt đảo ngược = Sai để sắp xếp theo thứ tự tăng dần và đặt đảo ngược = true thành sắp xếp theo thứ tự giảm dần.using the reverse keyword. Set reverse=False to sort in ascending order and set reverse=True to sort in descending order.