Python >> Tutoriel Python >  >> Python

Comment remplacer un ou plusieurs éléments de liste à des indices spécifiques en Python ?

Formulation du problème :remplacement d'un élément

Donné

  • Liste lst
  • Élément x
  • Indice i

Comment remplacer l'élément à l'index i dans la liste lst avec le nouvel élément x ?

Indexation des solutions

Vous utilisez une indexation simple en utilisant la notation entre crochets lst[i] = x pour remplacer l'élément à l'indice i dans la liste lst avec le nouvel élément x .

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

Mais que se passe-t-il si vous souhaitez remplacer plusieurs éléments à plusieurs index ?

Formulation du problème :remplacer plusieurs éléments

Donné

  • Liste lst
  • Éléments [x_0, x_1, ..., x_n]
  • Indices [i_0, i_1, ..., i_n]

Comment remplacer les éléments aux indices i_0, i_1, ..., i_n dans la liste lst avec les nouveaux éléments x_0, x_1, ..., x_n dans cet ordre ?

Méthode 1 :boucle For

Vous pouvez utiliser le range() fonction pour obtenir la paire du i-ème index et de la i-ème valeur de remplacement dans une boucle for. Ensuite, vous remplacez tous les éléments un par un.

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']

Méthode 2 :zip() et boucle For

Une approche plus pythonique consiste à compresser ensemble les indices et les valeurs de remplacement, puis à les parcourir simplement par paires en utilisant plusieurs affectations.

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']

Méthode 3 :NumPy + affectation de tranches

Debout sur les épaules des géants! Vous pouvez utiliser la puissante fonctionnalité d'indexation avancée de NumPy pour transmettre la liste des index à remplacer dans le schéma d'indexation et les remplacer par tous les éléments à droite d'une opération d'affectation.

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']

Méthode 4 :Solution Python à une ligne

J'adore les one-liners Python (c'est pourquoi j'ai écrit un livre à leur sujet). Peut-on résoudre le problème des remplacements multiples en une seule ligne ? Ouais, bien sûr !

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']
  • Nous utilisons la compréhension de liste [... for i in ...] pour itérer sur tous les indices de 0 à la longueur de la liste.
  • Nous utilisons l'opérateur ternaire ... if ... else ... pour vérifier si cet index est celui qui doit être remplacé.
  • Si l'index ne doit pas être remplacé, renvoyez l'élément d'origine, sinon renvoyez l'élément de remplacement.
  • Nous utilisons le list.index() méthode pour déterminer l'index de l'élément pour remplacer l'élément de liste d'origine.

Pas très joli, n'est-ce pas ? Si vous voulez toujours savoir comment fonctionnent les one-liners, consultez mon livre :

Livre Python One-Liners :maîtrisez d'abord la ligne unique !

Les programmeurs Python amélioreront leurs compétences en informatique avec ces lignes utiles.

Python One-Liners vous apprendra à lire et à écrire des « lignes simples » :des déclarations concises de fonctionnalités utiles regroupées dans une seule ligne de code. Vous apprendrez à décompresser et à comprendre systématiquement n'importe quelle ligne de code Python, et à écrire du Python éloquent et puissamment compressé comme un expert.

Les cinq chapitres du livre couvrent (1) les trucs et astuces, (2) les expressions régulières, (3) l'apprentissage automatique, (4) les principaux sujets de science des données et (5) les algorithmes utiles.

Des explications détaillées des one-liners introduisent les concepts clés de l'informatique etdéveloppez vos compétences en matière de codage et d'analyse . Vous découvrirez les fonctionnalités Python avancées telles que la compréhension de liste , tranchage , fonctions lambda , expressions régulières , carte et réduire fonctions et affectations de tranches .

Vous apprendrez également à :

  • Exploiter les structures de données pour résoudre des problèmes réels , comme utiliser l'indexation booléenne pour trouver des villes avec une pollution supérieure à la moyenne
  • Utiliser les bases de NumPy comme tableau , forme , axe , tapez , diffusion , indexation avancée , tranchage , tri , recherche , agrégation , et statistiques
  • Calculer des statistiques de base de tableaux de données multidimensionnels et les algorithmes K-Means pour l'apprentissage non supervisé
  • Créer davantage d'expressions régulières avancées en utilisant le regroupement et groupes nommés , anticipations négatives , caractères échappés , espaces blancs, jeux de caractères (et jeux de caractères négatifs ) et opérateurs gourmands/non gourmands
  • Comprendre un large éventail de sujets informatiques , y compris les anagrammes , palindromes , surensembles , permutations , factorielles , nombres premiers , Fibonacci chiffres, obscurcissement , recherche , et tri algorithmique

À la fin du livre, vous saurez comment écrire Python dans sa forme la plus raffinée , et créez de belles pièces concises d'"art Python" en une seule ligne.

Obtenez vos Python One-Liners sur Amazon !!