Kteam Q&A Community

Cộng đồng hỏi đáp về các vấn đề trong lập trình, công nghệ thông tin.

3

[Python] Hỏi về cách sắp xếp theo dòng trong mảng 2 chiều

Xin chào mọi người, cho phép mình làm phiền mọi người một chút

Giả sử mình có một mảng 2 chiều [[7,8,9],[1,2,3],[4,5,6]]

Mình thấy 789 tổng bằng 24, 123 tổng bằng 6, 456 tổng bằng 15

Làm thế nào để sắp xếp theo tổng từng dòng giảm dần

Kết quả xuất ra như thế này [[7,8,9],[4,5,6],[1,2,3]]

Cảm ơn mọi người nhiều ạ ^^

1 câu trả lời Thêm câu trả lời

4
VirusLove_7x đã trả lời 2017-05-20 12:58:01

Bạn hãy coi như mỗi cái mảng con là một phần tử. Muốn sắp xếp phần tử thì sort thôi

lst = [[7, 8, 9], [1, 2, 3], [4, 5, 6]]

#sort từ bé đến lớn
sorted(lst) #trả về một mảng khác được sắp xếp từ list lst và list lst không thay đổi

#lst được thay đổi
lst.sort()

còn nếu muốn nó từ lớn đến bé
sorted(lst, reverse=True)
lst.sort(reverse=True)

#nó giống như
lst.sort()
lst.reverse()

Còn nếu muốn tự sort không dùng hàm hỗ trợ

lst = [[7, 8, 9], [1, 2, 3], [4, 5, 6]]

for i in range(len(lst) - 1):
    for j in range(1, len(lst)):
        if sum(lst[i]) < sum(lst[j]):
            #swap 2 cái với nhau
            lst[i], lst[j] = lst[j], lst[i]

 

Tâm Lê đã bình luận 2017-05-20 14:15:19

Thanks a ạ em làm được rồi :D

2 bình chọn
VirusLove_7x đã bình luận 2017-05-20 18:17:16

vậy thì vote lên đi :3

2 bình chọn
taisang đã bình luận 2017-05-21 17:56:10

hàm có sẵn của python ko hoạt động tốt khi mảng 2 chiều có số âm

>>> lst = [[5,5],[1,1],[100,10,-60],[40,20,10]]
>>> lst.sort()
>>> lst
[[1, 1], [5, 5], [40, 20, 10], [100, 10, -60]]

' tương ứng [2,5,70,50] => sai 

 

hàm dựng của bạn chỉ đúng nếu đưa ra input ở trên

 

bạn chủ thớt nên tìm hiểu thuật toán sắp xếp 

0 bình chọn
VirusLove_7x đã bình luận 2017-05-21 18:11:15

Nếu muốn chính xác một trăm phần trăm thì nên sử dụng một cách sort mà python hỗ trợ riêng để sort mảng nhiều chiều (ma trận, matrix)

lst.sort(key=lambda x:x[1], reverse=True)

Nếu bạn muốn biết thêm chi tiết về key, lambda, x:x[1]  thì bạn có thể tham khảo ở: http://stackoverflow.com/questions/8966538/syntax-behind-sortedkey-lambda

0 bình chọn
VirusLove_7x đã bình luận 2017-05-21 18:32:54

corrent lần cuối

lst = sorted(lst, key=sum)
lst.sort(key=sum)

 

0 bình chọn

Câu trả lời của bạn

Bạn có thể trả lời câu hỏi này? Hãy chia sẻ nó cho mọi người.

Hủy bỏ hoặc

Thông tin

Đã hỏi 2017-05-20 11:55:50
Đã xem 1363 lần
Hoạt động 2017-05-21 18:32:54

Chiến dịch

Kteam - Howkteam Free Education