Рубрики
Без рубрики

Как заменить один или несколько элементов списка по конкретным показателям в Python?

Проблема. Индексирование решений Вы используете простую индексацию с использованием квадратной нотации кронштейна для замены элемента при индексе I в списке LST с новым элементом … Как заменить один или несколько элементов списка по конкретным показателям в Python? Читать далее “

Автор оригинала: Chris.

Формирование проблемы: замена одного элемента

Дано

  • Список лишенство
  • Элемент Икс
  • Индекс я

Как заменить элемент на индекс Я В списке lst С новым элементом х ?

Индексация решения

Вы используете Простая индексация Использование квадратной нотации кронштейна lst [я] Чтобы заменить элемент на индекс Я в списке lst С новым элементом х Отказ

>>> lst = ['Alice', 'Bob', 'Carl', 'Dave']
>>> x = 'Chris'
>>> i = 2
>>> lst[i] = x
>>> lst
['Alice', 'Bob', 'Chris', 'Dave']

Но что, если вы хотите заменить несколько элементов по нескольким показателям?

Формирование проблемы: замена нескольких элементов

Дано

  • Список лишенство
  • Элементы [x_0, x_1, ..., x_n]
  • Индексы [I_0, I_1, ..., I_N]

Как заменить элементы по индексам I_0, I_1, ..., I_N В Список lst С новыми элементами x_0, x_1, ..., x_n в этой последовательности?

Метод 1: для цикла

Вы можете использовать Диапазон () Функция, чтобы получить пару индекса I-TH и I-й заменой значения в для петли Отказ Тогда ты заменить Все элементы одностороннее.

lst = ['Alice', 'Bob', 'Carl', 'Dave', 'Elena', 'Frank', 'George']
repl = ['None', 'Foo', 'Bar']
indices = [0, 2, 5]


# Method 1: For Loop
for i in range(len(indices)):
    lst[indices[i]] = repl[i]

print(lst)
# ['None', 'Bob', 'Foo', 'Dave', 'Elena', 'Bar', 'George']

Способ 2: ZIP () и для цикла

Более питоновый подход состоит в том, чтобы застегивать индексы и значения замены, а затем просто итерацию над ними в парах с использованием нескольких заданий.

lst = ['Alice', 'Bob', 'Carl', 'Dave', 'Elena', 'Frank', 'George']
repl = ['None', 'Foo', 'Bar']
indices = [0, 2, 5]


# Method 2: zip() and for loop
for index, replacement in zip(indices, repl):
    lst[index] = replacement

print(lst)
# ['None' 'Bob' 'Foo' 'Dave' 'Elena' 'Bar' 'George']

Метод 3: Numpy + Назначение среза

Стоять на плечах гигантов! Вы можете использовать мощную расширенную функциональность «Numpy», чтобы передать список индексов, которые должны быть заменены в схеме индексации, и заменяют все элементы справа от операции назначения.

lst = ['Alice', 'Bob', 'Carl', 'Dave', 'Elena', 'Frank', 'George']
repl = ['None', 'Foo', 'Bar']
indices = [0, 2, 5]


# Method 3: NumPy + Slice Assignment
import numpy as np
lst = np.array(lst)
lst[indices] = repl
print(lst)
# ['None' 'Bob' 'Foo' 'Dave' 'Elena' 'Bar' 'George']

Метод 4: Python One-Liner Solution

Я люблю Python One-listers (Вот почему я написал книга о них ). Можем ли мы решить множественную задачу замены в одной строке? Да, конечно!

lst = ['Alice', 'Bob', 'Carl', 'Dave', 'Elena', 'Frank', 'George']
repl = ['None', 'Foo', 'Bar']
indices = [0, 2, 5]

# Method 4: Python One-Liner
lst = [repl[indices.index(i)] if i in indices else lst[i] for i in range(len(lst))]
print(lst)
# ['None' 'Bob' 'Foo' 'Dave' 'Elena' 'Bar' 'George']
  • Мы используем Понимание списка [... Для меня в ...] Чтобы повторить все индексы от 0 до Длина списка Отказ
  • Мы используем Тернарный оператор ... Если ... else ... Чтобы проверить, является ли этот индекс, который должен быть заменен.
  • Если индекс не должен быть заменен, верните исходный элемент, иначе верните замену элемента.
  • Мы используем list.index () Способ выяснить индекс элемента для замены элемента исходного списка.

Не очень красиво, не так ли? Если вы все еще хотите узнать, как работают одноклассники, ознакомьтесь с моей книгой:

Python One-Liners Книга

Python Programmemers улучшит свои навыки информатики с этими полезными одноклассниками.

Python One-listers научит вас читать и писать «одноклассники»: краткие заявления полезных функций, упакованных в одну строку кода. Вы узнаете, как систематически распаковать и понимать любую строку кода Python и писать красноречие, мощно сжатый Python, как эксперт.

Пять главных глав на пять глав обложки советы и трюки, регулярные выражения, машинное обучение, самые темы науки о данных и полезные алгоритмы. Подробные объяснения одноклассников вводят ключевые концепции компьютерных наук и повысить ваши кодировки и аналитические навыки. Вы узнаете о продвинутых функциях Python, такие как понимание списка, нарезки, нарезки, функции лямбда, регулярные выражения, карта и уменьшения функций и нарезки нарезки. Вы также узнаете, как:

Используйте структуры данных для решения реальных проблем, такие как использование булевой индексации для поиска городов с загрязнением выше среднего Используйте Numpy Basics, такие как массив, форма, ось, тип, вещание, расширенная индексация, нарезка, сортировка, поиск, агрегация и статистика Рассчитайте базовую статистику многомерных массивов данных и алгоритмы K-означает для безоговорочного обучения Создайте более усовершенствованные регулярные выражения с помощью группировки и названных групп, отрицательные LookAeads, сбежавшие символы, пробелы, наборы символов (и наборы отрицательных символов) и жадные/негридические операторы Понимать широкий ассортимент темы компьютерных наук, включая анаграммы, палиндромы, сверты, перестановки, факториалы, простые числа, цифры фибоначчи, обфускации, поиск и алгоритмическую сортировку

К концу книги вы узнаете, как писать Python в его самых утонченных, и создавать краткие, красивые куски «Python Art» в простой строке.

Получите свой Python One-Liners сейчас !!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.