[Python] Je veux faire d'une liste imbriquée un taple

Il est courant de faire d'une liste un tuple et vice versa.

Méthode générale

Une pratique courante consiste à utiliser les fonctions intégrées «list» et «tuple».

l = [0, 1, 2]
t = tuple(l)
print(t)
(0, 1, 2)

Le problème avec cette méthode

Cependant, si la liste est imbriquée, elle ne tapera que sur la hiérarchie la moins profonde.

l = [[0, 1, 2], [3, 4, 5, 6, 7], 8, 9]
t = tuple(l)
print(t) # ((0, 1, 2), (3, 4, 5, 6, 7), 8, 9)je veux que tu sois
([0, 1, 2], [3, 4, 5, 6, 7], 8, 9)

C'est tranchant.

Une fonction qui active une liste imbriquée en interne

Faisons-en un taple de niveau complet tout en l'appelant récursivement.

def list_to_tuple(l):
    return tuple(list_to_tuple(e) if isinstance(e, list) else e for e in l)
l = [[0, 1, 2], [3, 4, 5, 6, 7], 8, 9]
t = list_to_tuple(l)
print(t)
((0, 1, 2), (3, 4, 5, 6, 7), 8, 9)

Je l'ai fait.

Matériau d'origine et sa comparaison

En fait, cet article est [ici](https://blog.ttk1.net/2016/05/20/python%E3%81%A7%E5%85%A5%E3%82%8C%E5%AD%90% E6% A7% 8B% E9% 80% A0% E3% 81% Liste AE% E3% 82% 92tuple% E3% 81% AB% E5% A4% 89% E6% 8F% 9B% E3% 81% 97% E3% 81% 9F% E3% 81% 84 /) Pakuri. ~~ N'êtes-vous pas gêné ~~

La différence est que la partie qui utilisait l'instruction for et l'opérateur d'affectation là-bas est désormais incluse.

Pour les déclarations qui se répètent honnêtement, la notation d'inclusion appelle un processus dédié, ce qui raccourcit le temps d'exécution (Référence).

def list_to_tuple_orig(_list):
    t = ()
    for e in _list:
        if isinstance(e,list):
            t += (list_to_tuple(e),)
        else:
            t += (e,)
    return t
l = list(range(10000))
%timeit t = list_to_tuple_orig(l)
%timeit t = list_to_tuple(l)
%timeit t = tuple(l)
92.7 ms ± 576 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
877 µs ± 3.31 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
19.6 µs ± 47.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

C'est environ 100 fois plus rapide. C'est une grande défaite pour les fonctions intégrées.

Recommended Posts

[Python] Je veux faire d'une liste imbriquée un taple
Je veux faire un jeu avec Python
Je veux ajouter un joli complément à input () en python
Je veux créer un environnement Python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
Je souhaite créer une liste de paramètres à partir du code CloudFormation (yaml)
Je veux faire de matplotlib un thème sombre
Je veux créer une fenêtre avec Python
Je veux fusionner des dictionnaires imbriqués en Python
Je veux créer du code C ++ à partir de code Python!
Je veux écrire dans un fichier avec Python
Je souhaite créer une application Web en utilisant React et Python flask
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux répéter plusieurs fois un générateur Python
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Je veux écrire en Python! (2) Écrivons un test
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
Je veux faire fonctionner un ordinateur quantique avec Python
python / Créer un dict à partir d'une liste.
Je veux déboguer avec Python
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Je veux créer un éditeur de blog avec l'administrateur de django
[Python] Je souhaite obtenir un ensemble commun entre numpy
Je veux démarrer beaucoup de processus à partir de python
Je veux faire une macro de clic avec pyautogui (désir)
Je veux faire une macro de clic avec pyautogui (Outlook)
Je souhaite envoyer un message de Python à LINE Bot
Je veux rendre le type de dictionnaire dans la liste unique
J'ai fait un chronomètre en utilisant tkinter avec python
[Python] Je souhaite utiliser uniquement l'index lors de la mise en boucle d'une liste avec une instruction for
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Je veux imprimer dans la notation d'inclusion
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Comment convertir une liste bidimensionnelle en liste unidimensionnelle
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
[Python] J'ai essayé d'implémenter un tri stable, alors notez
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
Je veux utiliser jar de python
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
Je souhaite rechercher le texte intégral avec elasticsearch + python
Je veux analyser les journaux avec Python
python> Convertir le tuple en liste> aList = list (pi_tuple)
Je veux jouer avec aws avec python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
Je veux faire un programme d'automatisation!
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai créé une API Web
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
Une histoire que je voulais faire quand j'ai eu une liste de sessions d'étude avec Python
Je veux faire un changeur de voix en utilisant Python et SPTK en référence à un site célèbre
[Introduction à Python] Quelle est la différence entre une liste et un taple?
[Mémo Python] Je souhaite obtenir un nombre hexadécimal à 2 chiffres à partir d'un nombre décimal
Je souhaite convertir une table convertie en PDF en Python en CSV
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)