Hỏi về comparator trong python

from functools import cmp_to_key

a = [56, 14, 11, 756, 34, 90, 11, 11, 65, 0, 11, 35]

def compare(a, b):
    if a!= 11 or b != 11:
        return a - b

print(sorted(a, key=cmp_to_key(compare)))

sao của mình nó k sort ra kết quả như này

[0, 14, 11, 34, 35, 56, 11, 11, 65, 90, 11, 756]

mà lại báo lỗi

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2023.1.4\plugins\python-ce\helpers\pydev\pydevconsole.py", line 364, in runcode
    coro = func()
           ^^^^^^
  File "<input>", line 1, in <module>
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2023.1.4\plugins\python-ce\helpers\pydev\_pydev_bundle\pydev_umd.py", line 198, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2023.1.4\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "E:\Code\python\sort_comparotor.py", line 9, in <module>
    print(sorted(a, key=cmp_to_key(compare)))
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: '<' not supported between instances of 'NoneType' and 'int'

mong các cao nhân giúp đỡ

bạn hãy giải thích code hàm compare xem

1 Like

thì giữ nguyên vị trí của 11 còn các số khác trong list sắp xếp theo thứ tự tăng dần đó

À, sorry đọc lướt nên khôn thấy bạn xài

cmp_to_key

Bạn coi lại cái hàm compare bạn viết á

1 Like

cung cấp gì giờ b
b sửa code giúp mình với

sửa lại giúp mình với

bạn coi thử cái code này

Sở dĩ code của bạn báo lỗi, là do trong list có nhiều hơn một số 11

Screen Shot 2023-07-26 at 14.28.01

2 Likes

thế mới cần a và b. bao nhiêu số chẳng được b

chỗ nào trong code giữ nguyên?

chỗ nào trong code tăng dần?

1 Like

Hàm này thiếu return ở trường hợp else nên báo lỗi. Trường hợp else chính là trường hợp cả 2 đều bằng 11 đó.

3 Likes

Sau khi đọc lại đề bài thì mình hiểu số 11 ở đây làm cọc rào. Để nguyên không đụng đến. Chỉ sắp xếp từ nhỏ đến lớn trong khoảng giữa hai số 11 mà thôi.

Chủ topic hiện không làm được điều đó. Và him cũng không biết cách diễn tả đề bài bằng văn nói sao cho gãy gọn, súc tích, dễ hiểu. Điểm này làm là điểm trừ, cần rèn luyện thêm, không là sau này khó làm việc nhóm.

Các bạn đọc không kỹ đề tưởng là sắp xếp theo thứ tự từ nhỏ đến lớn, 11 cũng xem như một phần tử bình thường.

Vậy, bài toán cần được viết rõ ràng hơn, có thể là: “sắp xếp tăng dần các phần tử nằm giữa 2 phần tử có giá trị là 11”. Nào, mời các cao nhân thử sức. Mình bó tay :frowning:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?