Как менять местами элементы списка?
По обмену — формируется исходный кортеж (tuple) из значений элементов, потом из этих элементов в обратном порядка образуется новый кортеж, значения присваиваются новому кортежу.
Отслеживать
ответ дан 26 дек 2018 в 17:56
52.3k 3 3 золотых знака 19 19 серебряных знаков 43 43 бронзовых знака
А как более понятно это объяснить?
26 дек 2018 в 18:17
@Петрович Например есть список l = [1,2,3,4,5,6,7] . Мы хотим поменять местами первый и последний элементы списка. Пусть k — это индекс элемента списка. k = 0 , индекс первого єдемента списка. Последний элемент имеет ииндекс -1 . Выполняем l[-1], l[k] = l[k], l[-1] . Теперь выводим список на печать print(l) . Получаем [7, 2, 3, 4, 5, 6, 1]
26 дек 2018 в 20:13
27 дек 2018 в 5:42
k = int(input(‘Введите количество подсписков в списке ‘)) m = [] for i in range(0, k+1): arr = list(input(‘введите список ‘).split()) arr[-1], arr[i] = arr[i], arr[-1] m.append(arr) print(m)
27 дек 2018 в 5:43
Список пустой или слишком короткий. Потренируйтесь на m = [1,2,3,4,5] , чтобы убедиться, что обмен работает. Ввод списка — это уже другая задача. Код в комментариях нечитабелен.
27 дек 2018 в 5:46
Попробуйте проанализировать следующий пример:
arr = list(map(int, input('Введите некоторое количество целых чисел через пробел: ').split())) # Например: Введите некоторое количество целых чисел через пробел: 1 2 3 4 5 6 7 print(arr) # [1, 2, 3, 4, 5, 6, 7] k = -1 # индекс последнего элемента списка при первой итерации for i in range(len(arr)//2): print("\nбыло - ", i, arr) arr[k], arr[i] = arr[i], arr[k] print("стало ", arr) k -= 1 """ было - 0 [1, 2, 3, 4, 5, 6, 7] стало [7, 2, 3, 4, 5, 6, 1] было - 1 [7, 2, 3, 4, 5, 6, 1] стало [7, 6, 3, 4, 5, 2, 1] было - 2 [7, 6, 3, 4, 5, 2, 1] стало [7, 6, 5, 4, 3, 2, 1] """
Отслеживать
ответ дан 27 дек 2018 в 10:38
73.5k 110 110 золотых знаков 38 38 серебряных знаков 55 55 бронзовых знаков
- python
- python-3.x
- python-3.5
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.9.3159
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как поменять местами максимальный и минимальный элемент списка?
После определения максимума и минимума в списке не могу понять, как поменять их местами. Пробовал по индексу, типа minimum[i], но вижу ошибку TypeError: ‘int’ object is not subscriptable. Прошу помощи.
- Вопрос задан 15 мар. 2023
- 720 просмотров
Комментировать
Решения вопроса 1

Включи логику.
Чтобы прочитать/записать элемент списка, нужно знать его индекс.
Ты знаешь значение минимума/максимума, но не индекс.
Вывод: нужно в цикле поиска обновления не только само значение minimum и maximum, но и в отдельной паре переменных хранить индекс i, где был обнаружен последний минимум/максимум.
Любопытно, что ты уже используешь enumerate() для перечисления списка, но до сих пор не использовал индекс очередного элемента i, который он тебе сообщает.
Ответ написан 15 мар. 2023
Emince @Emince Автор вопроса
В том то и дело, я не могу понять, как сделать print(maximum[i] ) — работает,
i_max = maximum[i]
print(i_max) — не работает

Emince, перечитай мой ответ.
в отдельной паре переменных хранить индекс i, где был обнаружен последний минимум/максимум
И да, конечно же, minimum[i] никогда не будет работать. Переменная minimum хранит число, что ты вообще ожидаешь получить, пытаясь применить к числу операцию получения элемента?
Emince @Emince Автор вопроса
Ок, сделал 2 переменные, присвоил им индексы мин и макс, как заменить их в списке?
point_list = [] dog_numbers = int(input('Введите количество собак: ')) for _ in range(dog_numbers): dog_point = int(input('Введите очки собак: ')) point_list.append(dog_point) print(point_list) maximum = point_list[0] minimum = point_list[0] i_max = 0 i_min = 0 for i, number in enumerate(point_list): if number > maximum: maximum = number i_max = i elif number < minimum: minimum = number i_min = i print(i_max, i_min)

Emince, есть классический способ поменять местами значения двух переменных (для примера a и b), пригоден для большинства языков. Мог бы и додуматься, если честно.
temp = a a = b b = temp
В питоне есть еще вот такая идиома:
a, b = b, a # тоже поменяет значения местами
В твоём случае ты оперируешь не переменными a и b, а элементами массива point_list[i_min] и point_list[i_max]. Дальше сам.
Emince @Emince Автор вопроса
point_list = [] dog_numbers = int(input('Введите количество собак: ')) for _ in range(dog_numbers): dog_point = int(input('Введите очки собак: ')) point_list.append(dog_point) print(point_list) maximum = point_list[0] minimum = point_list[0] i_max = 0 i_min = 0 for i, number in enumerate(point_list): if number > maximum: maximum = number i_max = i elif number < minimum: minimum = number i_min = i point_list[i_min], point_list[i_max] = point_list[i_max], point_list[i_min] print(point_list)
Спасибо! Сегодня первый день знакомства со списками. Про схему temp = a я думал, но не знал, как правильно описать ее.
Замена элемента в списке по его индексу
В результате элемент с индексом i из последовательности sequence получит новое значение (заменится) на объект x .
Если индекс i отрицателен, то индекс будет считаться относительно конца последовательности sequence . В этом случае положительный индекс можно посчитать по формуле len(sequence) - i .
Обратите внимание, что -0 по-прежнему будет 0.
При попытке заменить значение элемента с индексом, превышающим длину последовательности len(sequence) поднимается исключение IndexError .
Эта операция поддерживаются изменяемыми типами последовательностей.
Примеры изменения элемента списка по индексу.
>>> x = [2, 5, 8, 11, 14, 17] >>> x[1] = 150 >>> x # [2, 150, 8, 11, 14, 17] >>> x[-1] = 100 >>> x # [2, 150, 8, 11, 14, 100] x = ['el_1', 'el_2', 'el_3'] >>> x[2] = 'lorem' >>> x # ['el_1', 'el_2', 'lorem'] # замена элемента неизменяемой # последовательности невозможна >>> x[3] = 'foo' # Traceback (most recent call last): # File "", line 1, in # IndexError: list assignment index out of range
Замена элементов в списке по условию.
Например, имеем числовой список, в котором присутствуют как целые, так и вещественные числа. Необходимо получить тот же список, в котором вещественные числа округлены до целых.
В данном случае можно поступить 2-мя способами: первый - это создать новый пустой список и в цикле for/in добавлять в него значения, округляя все элементы до целого, из первого списка. Недостаток такого способа: если список огромный то столкнемся с не экономным расходом памяти.
Второй подход - это при каждой итерации по списку, проверять тип числа и если это вещественное число то округлять его до целого и на лету изменять значение в списке по его индексу. Недостаток: скорость обработки списка незначительно уменьшиться.
# имеем числовой список lst = [1, 5.5, 3, 8.2, 11.1, 10, 4, 5.6, 9] # используем функцию `enumerate()` # для определения индекса элемента # при каждой итерации for n, i in enumerate(lst, 0): # проверяем тип числа if type(i) == float: # если float, то округляем i = round(i) # изменяем элемент по индексу lst[n] = i >>> lst # [1, 6, 3, 8, 11, 10, 4, 6, 9]
Замена элементов вложенных списков.
>>> x = [[2, 150], [11, 14, 17]] >>> x[0] = [0, 0] >>> x # [[0, 0], [11, 14, 17]] >>> x[1][1] = 1000 >>> x # [[0, 0], [11, 1000, 17]] >>> x[0][1] = 'foo' >>> x # [[0, 'foo'], [11, 1000, 17]] >>> x[1] = 'replace' >>> x # [[0, 'foo'], 'replace']
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Изменение/замена элемента списка по индексу
- Изменение части списка операцией среза
- Изменение списка срезом c заданным шагом
- Удаление части списка операцией среза
- Удаление части списка по срезу с заданным шагом
- Метод list.append(), добавляет значение в конец списка
- Метод list.clear(), очищает список
- Метод list.copy(), копия списка
- Метод list.extend(), расширяет список другой последовательностью
- Расширение списка его содержимым
- Метод list.insert(), вставить элемент по индексу
- Метод list.pop(), получение с удалением элемент списка
- Метод list.remove(), удаление элемента списка по значению
- Метод list.reverse(), разворачивает элементы списка
- Удаление элемента списка по индексу
- Удаление дубликатов из списка Python с сохранением очередности
Поменять наибольший и наименьший элемент списка (Python)
В скачках участвует N лошадей, у каждой из них есть определённое количество очков за сезон. На огромном табло выводятся очки каждой лошади. Однако при выводе был обнаружен баг: лошади с наибольшим и наименьшим количеством очков поменялись местами! Нужно это исправить.
Дан список очков из N лошадей (число N вводит пользователь). Напишите программу, которая меняет местами наибольший и наименьший элементы в списке.
Голосование за лучший ответ
n = int(input())
lst = list()
for i in range(n): lst.append(int(input()))
print(lst)
_min = min(lst)
ind_min = lst.index(_min)
_max = max(lst)
ind_max = lst.index(_max)
lst[ind_min] = _max
lst[ind_max] = _min
print(lst)
Егор МорозовЗнаток (277) 1 год назад
не правильно.
входные данные:
3
300
450
45
ответ:
[300, 450, 45]
[300, 45, 450]
логично, что 300 не наименьший элемент
Егор Морозов Знаток (277) Егор Морозов, а хотя правильно, подумал, что должны по возрастанию выводиться

Можно попробовать так
Егор ВайсбергЗнаток (274) 1 год назад
можешь пж код не фоткой скинуть
Евгений Таттар Ученик (143) Егор Вайсберг, Я не помню, какая это была тема. Если подскажешь, то попробую отыскать код.
N = [123,250,324]
print(N)
minimum = N.index(min(N))
maximum = N.index(max(N))
N[maximum], N[minimum] = N[minimum], N[maximum]
print(N)