Как поменять местами элементы в списке python
Перейти к содержимому

Как поменять местами элементы в списке python

  • автор:

Как менять местами элементы списка?

По обмену — формируется исходный кортеж (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

Vindicar

Включи логику.
Чтобы прочитать/записать элемент списка, нужно знать его индекс.
Ты знаешь значение минимума/максимума, но не индекс.
Вывод: нужно в цикле поиска обновления не только само значение minimum и maximum, но и в отдельной паре переменных хранить индекс i, где был обнаружен последний минимум/максимум.

Любопытно, что ты уже используешь enumerate() для перечисления списка, но до сих пор не использовал индекс очередного элемента i, который он тебе сообщает.

Ответ написан 15 мар. 2023
Emince @Emince Автор вопроса

В том то и дело, я не могу понять, как сделать print(maximum[i] ) — работает,
i_max = maximum[i]
print(i_max) — не работает

Vindicar

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)

Vindicar

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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *