[PYTHON] Comment obtenir une liste excluant les éléments dont l'index est i ...?

Je suis curieux de savoir le moyen le plus rapide d'obtenir une liste sans * modifications * de la liste ʻitems* sans ʻitems [i], ou une manière raisonnablement rapide et intelligente d'écrire (en excluant parfois le i-ème en mathématiques). , Parce que je veux quelque chose comme ça).

Je l'ai mesuré avec % timeit de Jupyter.

Lorsque vous n'utilisez pas numpy

items = list(range(1000000))
i = 17 #adapté

Combiner les tranches

%timeit items[:i] + items[i+1:]
11.2 ms ± 349 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Notation inclusive (en utilisant ʻenumerate`)

%timeit [item for k, item in enumerate(items) if k != i]
65.1 ms ± 212 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

Notation d'inclusion

%timeit [items[k] for k in range(len(items)) if k != i]
75.5 ms ± 800 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

Il semble que le tranchage soit extrêmement plus rapide. Au fait, j'ai été un peu surpris que l'utilisation du deuxième «énumérer» soit plus rapide que le troisième exemple.

Lors de l'utilisation de numpy

@ antimon2's Maru Park, mais il existe les méthodes suivantes.

import numpy as np
items = np.arange(1000000)
i = 17

np.hstack

%timeit np.hstack([items[:i], items[i+1:]])
584 µs ± 6.32 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

np.delete

%timeit np.delete(items, i)
585 µs ± 3.73 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Index booléen

%timeit items[np.arange(items.size) != i]
1.9 ms ± 5.82 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Notation d'inclusion

%timeit np.array([items[k] for k in range(len(items)) if k != i])
182 ms ± 3.85 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

Encore une fois, les tranches se combinent très rapidement. Compte tenu de la lisibilité, est-ce que «np.delete» est le meilleur parce que la vitesse ne change pas tellement?

Si vous en avez d'autres, faites-le moi savoir.

Recommended Posts

Comment obtenir une liste excluant les éléments dont l'index est i ...?
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
J'ai essayé "Comment obtenir une méthode décorée en Python"
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir une liste d'exceptions intégrées pour python
Comment obtenir une liste de liens à partir d'une page de wikipedia
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
Comment obtenir stacktrace en python
J'ai mesuré 6 méthodes pour obtenir l'indice de la valeur maximale (valeur minimale) de la liste
Comment effacer un taple dans une liste (Python)
Obtenir uniquement les éléments de sous-classe dans une liste
J'ai lu "Comment créer un laboratoire de piratage"
J'ai créé un outil pour obtenir de nouveaux articles
Comment supprimer les éléments en double dans la liste Python 3
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment obtenir le "nom" d'un champ dont la valeur est limitée par l'attribut choice dans le modèle Django
[Python] Je souhaite utiliser uniquement l'index lors de la mise en boucle d'une liste avec une instruction for
Convertir un objet de tranche en liste de numéros d'index
Comment obtenir un utilisateur connecté avec les forms.py de Django
Je veux commencer avec le noyau Linux, quelle est la structure de la tête de liste?
Comment écrire un type liste / dictionnaire de Python3
[Python] Je veux faire d'une liste imbriquée un taple
Comment utiliser la liste []
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Comment mélanger une partie de la liste Python (au hasard.shuffle)
[Python] Je souhaite obtenir un ensemble commun entre numpy
[Commande] Commande pour obtenir une liste de fichiers contenant des caractères pleine largeur
Obtenez le nombre d'éléments spécifiques dans la liste python
Développer une bibliothèque pour obtenir la liste des collections Kindle en Python
Discord's Python 1.5 ou version ultérieure, je ne parviens pas à obtenir la liste des membres
J'ai essayé de commencer avec Hy ・ Définir une classe
Comment afficher une liste des versions installables avec pyenv
Comment extraire un index autre qu'un index spécifique avec Numpy
J'ai écrit un script pour obtenir un site populaire au Japon
Comment connecter le contenu de la liste dans une chaîne de caractères
Comment appeler une fonction
La liste Python n'est pas une liste
Comment pirater un terminal
Il est étonnamment difficile d'obtenir une liste de la dernière date et heure de connexion des espaces de travail
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
Essayez d'obtenir la liste des fils du bulletin d'information (je n'aime pas) avec Python.
Comment obtenir toutes les valeurs possibles dans une expression régulière
Un mémorandum lors de l'acquisition automatique avec du sélénium
Est-il facile de synthétiser un médicament sur le marché?
J'ai écrit un script pour vous aider à démarrer avec AtCoder à grande vitesse!
J'ai essayé de créer une liste de nombres premiers avec python
[Python] Comment obtenir et modifier les lignes / colonnes / valeurs d'une table.
J'ai essayé de résumer brièvement la procédure de démarrage du développement de Django
Comment utiliser la reconnaissance visuelle pour obtenir l'ID de ligne d'une fille
Je ne sais pas comment obtenir les paramètres de requête dans GAE / P
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
[Python] Comment obtenir une valeur avec une clé autre que value avec Enum
Est-ce que do.call () de R est une fonction classique d'ordre supérieur? Apprendre à utiliser
Je souhaite créer une liste de paramètres à partir du code CloudFormation (yaml)
Comment obtenir un ingénieur de la trentaine
Comment supprimer les doublons d'une liste Python tout en préservant l'ordre.
Comment supprimer plusieurs positions (index) spécifiées dans une liste Python
J'ai fait beaucoup de recherches sur la façon dont Python est exécuté