Cách sắp xếp các chữ cái trong một chuỗi theo thứ tự abc trong Python


156

Có cách nào dễ dàng để sắp xếp các chữ cái trong một chuỗi theo thứ tự abc trong Python không?

Vì vậy đối với:

a = 'ZENOVW'

Tôi muốn quay lại:

'ENOVWZ'

Câu trả lời:


275

Bạn có thể làm:

>>> a = 'ZENOVW'
>>> ''.join(sorted(a))
'ENOVWZ'

Lưu ý rằng sorted(a)sẽ trả về một danh sách được sắp xếp, vì vậy để so sánh chuỗi bạn không cần join()(xem câu trả lời của askewchan bên dưới).
Skippy le Grand Gourou

Lưu ý rằng ''.join(sorted(a, reverse=True, key=str.lower))có thể được sử dụng để thực hiện một loại không phân biệt chữ hoa chữ thường. Có thể có ích.
Siêu anh hùng 13/12/19

89
>>> a = 'ZENOVW'
>>> b = sorted(a)
>>> print b
['E', 'N', 'O', 'V', 'W', 'Z']

sortedtrả về một danh sách, vì vậy bạn có thể tạo lại chuỗi đó bằng cách sử dụng join:

>>> c = ''.join(b)

nối các mục bvới nhau bằng một chuỗi trống ''ở giữa mỗi mục.

>>> print c
'ENOVWZ'

30

Giải pháp Sắp xếp () có thể cung cấp cho bạn một số kết quả không mong muốn với các chuỗi khác.

Danh sách các giải pháp khác:

Sắp xếp các chữ cái và làm cho chúng khác biệt:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower())))
' belou'

Sắp xếp các chữ cái và làm cho chúng khác biệt trong khi giữ mũ:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s)))
' Bbelou'

Sắp xếp các chữ cái và giữ các bản sao:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(s))
' BBbbbbeellou'

Nếu bạn muốn loại bỏ khoảng trắng trong kết quả, hãy thêm hàm dải () trong bất kỳ trường hợp nào được đề cập:

>>> s = "Bubble Bobble"
>>> ''.join(sorted(set(s.lower()))).strip()
'belou'

Này, giải pháp đầu tiên đó rất hữu ích cho một phần bài tập về nhà mà tôi phải tìm một lá thư bằng cách chia đôi. Vâng, tôi đã biết về lớp chuỗi và phương thức find (), nhưng điều này đánh bại mục đích của bài tập;)
runlevel0

9

Bạn có thể sử dụng giảm

>>> a = 'ZENOVW'
>>> reduce(lambda x,y: x+y, sorted(a))
'ENOVWZ'

7

Hàm Python sortedtrả về kết quả dựa trên ASCII cho chuỗi.

TUYỆT VỜI : Trong ví dụ dưới đây, edđứng sau HWdo giá trị ASCII.

>>>a = "Hello World!"
>>>"".join(sorted(a))
' !!HWdellloor'

ĐÚNG : Để viết chuỗi đã sắp xếp mà không thay đổi trường hợp chữ. Sử dụng mã:

>>> a = "Hello World!"
>>> "".join(sorted(a,key=lambda x:x.lower()))
' !deHllloorW'

Nếu bạn muốn loại bỏ tất cả dấu chấm câu và số. Sử dụng mã:

>>> a = "Hello World!"
>>> "".join(filter(lambda x:x.isalpha(), sorted(a,key=lambda x:x.lower())))
'deHllloorW'

3

mã có thể được sử dụng để sắp xếp chuỗi theo thứ tự bảng chữ cái mà không sử dụng bất kỳ chức năng sẵn có nào của python

k = input ("Nhập lại bất kỳ chuỗi nào")

li = []
x = len(k)
for i in range (0,x):
    li.append(k[i])

print("List is : ",li)


for i in range(0,x):
    for j in range(0,x):
        if li[i]<li[j]:
            temp = li[i]
            li[i]=li[j]
            li[j]=temp
j=""

for i in range(0,x):
    j = j+li[i]

print("After sorting String is : ",j)

1
Lý tưởng nhất là bạn muốn thêm một số giải thích cho mã để làm rõ những gì nó làm. Chào mừng đến với SO!
geisterfurz007

1

Thực sự thích câu trả lời với hàm less (). Đây là một cách khác để sắp xếp chuỗi bằng cách sử dụng tích lũy ().

from itertools import accumulate
s = 'mississippi'
print(tuple(accumulate(sorted(s)))[-1])

đã sắp xếp (>) - [ ]

tuple (tích lũy (đã sắp xếp) (> ',' iiiimppssss ')

Chúng tôi đang chọn chỉ số cuối cùng (-1) của bộ dữ liệu


Làm tốt cho câu trả lời đầu tiên của bạn. Chỉ cần xem xét một chuỗi gồm 1 triệu ký tự, lệnh tuple () của bạn sẽ tạo ra một danh sách lớn các tùy chọn tích lũy sử dụng lượng bộ nhớ lớn không cần thiết.
tda

Đã đồng ý. Vì vậy, để cải thiện độ phức tạp của không gian, ý tưởng là làm việc với chính vòng lặp, bắt đầu chuyển đổi nó thành cấu trúc dữ liệu. Đẹp. Cảm ơn bạn.
Mono
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.