как подсчитать, сколько элементов изменили свою позицию в списке после сортировки?

#python-3.x #list #sorting

#python-3.x #Список #сортировка

Вопрос:

Я хочу напечатать количество чисел, которые изменили свою позицию. Мой код:

 def mysort(arr):
    count = 0
    for i in range(len(arr)): 
        min_value = i
        for j in range(i, len(arr)): 
            if arr[j] < arr[min_value]:
                min_value = j
                count  = 1
        
        temp = arr[i] 
        arr[i] = arr[min_value] 
        arr[min_value] = temp 
    
    return count 

my_list = [4,2,3,1,6,5]
print(mysort(my_list))
  

Мой код возвращается 3 как результат, но он должен вернуться 4 . Как я могу это исправить?

Ответ №1:

Чтобы подсчитать количество элементов с измененными позициями, почему бы не попробовать:

 def count_change(old, new):
    # assume old and new have the same length
    count = 0
    for x,y in zip(old, new):
        if x != y:
            count  = 1
    return count
  

Ваш код фактически подсчитывает количество подкачки значений

Комментарии:

1. Или sum(x != y for (x, y) in zip(old, new))

2. Или sum(map(operator.ne, old, new))