2010-09-08 43 views
7

Tôi có danh sách số nguyên chưa được phân loại trong danh sách Python. Tôi muốn sắp xếp các phần tử trong một tập hợp con của danh sách đầy đủ, không phải danh sách đầy đủ. Tôi cũng muốn sắp xếp danh sách tại chỗ để không tạo danh sách mới (tôi đang thực hiện việc này rất thường xuyên). Ban đầu, tôi đã thửSắp xếp danh sách con trong danh sách số nguyên Python

p[i:j].sort() 

nhưng điều này không thay đổi nội dung của p có lẽ do danh sách mới được tạo, sắp xếp và sau đó vứt đi mà không ảnh hưởng đến nội dung của danh sách gốc. Tôi có thể, tất nhiên, tạo ra chức năng sắp xếp của riêng tôi và sử dụng vòng lặp để chọn các yếu tố thích hợp nhưng điều này không cảm thấy bịnh thiêu. Có cách nào tốt hơn để sắp xếp danh sách phụ tại chỗ không?

Trả lời

15

Bạn có thể viết p[i:j] = sorted(p[i:j])

+0

+1: Đánh bại tôi bằng giây với giải pháp đơn giản hơn. –

+1

Vẫn không phải những gì người điều khiển mong muốn, nhưng những gì tôi sẽ đề nghị. Nó vẫn phải tạo một mảng con riêng và sắp xếp nó trước khi gán nó cho 'p [i: j]'. Tôi đã nghĩ một thời gian rằng cần có một tùy chọn trong sắp xếp() để xác định phạm vi sắp xếp. Điều đó sẽ loại bỏ việc sử dụng bộ nhớ không cần thiết. –

+1

Đó chắc chắn là địa chỉ "làm thế nào" nhưng điều này sẽ không tạo ra ít nhất 2 danh sách mới? Một cho p [i: j] bên trong được sắp xếp và thứ hai cho kết quả từ được sắp xếp. – sizzzzlerz

0

"tại chỗ" không có nghĩa là nhiều. Bạn muốn điều này.

p[i:j] = list(sorted(p[i:j])) 
-1

Điều này là do p [i: j] trả về danh sách mới. Tôi có thể nghĩ về giải pháp này ngay lập tức:

l = p[i:j] 
l.sort() 
a = 0 
for x in range(i, j): 
    p[x] = l[a] 
    a += 1 
+0

Bạn chỉ có thể viết 'p [i: j] = l' – kennytm

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