Python >> Tutoriel Python >  >> Python

Comment vérifier si une liste est imbriquée dans Python ?

Résumé : L'une des méthodes suivantes peut être utilisée pour vérifier si une liste est vide :-

  • Méthode 1 :Utilisation de isinstance() avec any()
  • Méthode 2 :Utilisation des méthodes isinstance() et len() dans la boucle For

Problème : Étant donné une liste; comment vérifier s'il est imbriqué ou non ?

Considérant que vous avez une liste telle qu'elle est parfois imbriquée alors que parfois elle n'est pas imbriquée. Selon qu'il est imbriqué ou non, la suite de votre flux de programme serait différente. Par exemple, vous alimentez la liste dans un dataframe . Le code pour ce faire est différent selon que la liste est plate ou imbriquée. L'aplatissement de la liste imbriquée donne une structure différente aux données. Ainsi, vous devez maintenir la structure. Alors, comment différencieriez-vous et reconnaîtriez-vous une liste imbriquée d'une liste aplatie (liste non imbriquée) ?

Exemple :

[a,b,c] # Output: – > False
[[1,2,3],[4,5,6]] # Output – > True

Dans cet article, discutons rapidement des méthodes qui peuvent être utilisées pour vérifier si une liste donnée est imbriquée ou non. Alors, sans plus tarder, plongeons-nous dans les solutions.

Méthode 1 :Utiliser isinstance() avec any()

La solution la plus simple à notre problème est d'utiliser le isinstance() méthode et une expression de générateur dans le any() fonction. Avant de plonger dans la solution, comprenons l'utilisation du isinstance() et any() méthodes qui nous aideront à vérifier la liste si elle est imbriquée ou non.

isinstance est une méthode intégrée en Python qui renvoie True lorsque l'objet spécifié est une instance du type spécifié, sinon il renvoie False .

Syntaxe :

Exemple :

a = isinstance(25, int)
print(a)

Sortie :

True

any() est une fonction intégrée qui renvoie True si un élément d'un itérable est True , sinon il renvoie False .

Syntaxe :

any(itérable )

Exemple :

li = [0, 10, 100, 1000]
x = any(li) # Returns True because the first item is True
print(x)

Sortie :

True

Maintenant que nous connaissons l'utilisation de chaque fonction, examinons la solution à notre problème. Veuillez suivre le code ci-dessous qui illustre la solution.

Solution

li_1 = [1, 2, 3]  # flat list
li_2 = [[1, 2, 3], [4, 5, 6]]  # nested list
# Testing for nested list
li_1_output = any(isinstance(i, list) for i in li_1)
li_2_output = any(isinstance(i, list) for i in li_2)
# Printing output
print("Is li_1 Nested?", li_1_output)
print("IS li_2 Nested?", li_2_output)

Sortie :

Is li_1 Nested? False
IS li_2 Nested? True

Explication

Dans le code ci-dessus, le any() permet de vérifier chaque occurrence de la liste tandis que le isinstance() La méthode vérifie si chaque instance d'un élément à l'intérieur de la liste est une liste elle-même ou non. Par conséquent, dans le premier cas, la sortie est False puisque Python ne trouve aucune occurrence d'une autre liste dans li_1 tandis que dans le second cas, il trouve quelques listes dans la liste parent li_2 et il renvoie True .

Méthode 2 :Utilisation des méthodes isinstance() et len() dans la boucle For

Une autre solution à notre problème consiste à utiliser une variable compteur qui compte le nombre d'éléments dans la liste et le compare à la longueur réelle de la liste. Si la longueur de la liste est égale au nombre d'éléments dans la liste, il ne s'agit pas d'une liste imbriquée, sinon c'est une liste imbriquée. Jetons un coup d'œil au programme ci-dessous qui illustre ce concept. (Veuillez suivre les commentaires avec le code pour une meilleure compréhension.)

li_1 = [1, 2, 3]  # flat list
li_2 = [[1, 2, 3], [4, 5, 6]]  # nested list


# function to evaluate if the list is nested or not
def count(l):
    flag = 0  # counter variable to keep count of the number of elements in the list
    # iterate through the elements of the list
    for item in l:
        # check if the item is a list (iterable) or not
        if isinstance(item, list):
            flag = flag + len(item)
        else:
            flag = flag + 1
    return flag


x = count(li_1)
print("Is li_1 Nested? ", bool(x != len(li_1)))
y = count(li_2)
print("Is li_2 Nested? ", bool(len(li_2) != y))

Sortie :

Is li_1 Nested?  False
Is li_2 Nested?  True

La méthode NumPythonic

Une autre approche intéressante pourrait être de convertir la liste donnée en un tableau en utilisant la bibliothèque Numpy . De plus, si vous travaillez avec des ensembles de données, il est tout à fait possible que vous ayez affaire à des tableaux au lieu de listes, ce qui rend encore plus raisonnable de discuter du NumPythonic façon d'aborder notre problème. Tout en traitant des tableaux, notre tâche devient extrêmement facile car tout ce que nous avons à faire maintenant est de vérifier si le tableau donné est un unidimensionnel déployer.

#Remarque : Le ndim l'attribut permet de trouver la dimension d'un tableau et le size() permet de trouver le nombre d'éléments d'un tableau le long d'un axe donné.

Jetons un coup d'œil au programme suivant qui nous aidera à comprendre avec quelle facilité nous pouvons déduire si la liste donnée est imbriquée ou non en la convertissant en tableau.

import numpy as np

li_1 = [[1, 2, 3, 4], [5, 6, 7, 8]]
li_2 = [1, 2, 3, 4, 5]
arr_1 = np.array(li_1)
arr_2 = np.array(li_2)
print("Is arr_1 nested? ", bool(arr_1.ndim > 1))
print("Is arr_2 nested? ", bool(arr_2.ndim > 1))

Sortie :

Is arr_1 nested?  True
Is arr_2 nested?  False

Edit :Si vous souhaitez apprendre NumPy sur la base d'un apprentissage basé sur des énigmes, vous serez peut-être fasciné de jeter un œil à ce livre étonnant publié par Chris qui vous aide à apprendre à l'aide des énigmes de ce livre.

Voulez-vous devenir un maître NumPy ? Découvrez notre livre de puzzle interactif Coffee Break NumPy et boostez vos compétences en data science ! (Le lien Amazon s'ouvre dans un nouvel onglet.)

Conclusion

J'espère que les méthodes décrites dans cet article vous ont aidé à apprendre des concepts très basiques mais très importants qui peuvent être utilisés pour vérifier si une liste est imbriquée ou non. Les principaux concepts abordés dans cet article étaient :

  • Utiliser isinstance() et any() méthodes pour vérifier si la liste donnée est imbriquée ? Nous avons également discuté brièvement de chaque méthode avant de parvenir à la solution finale.
  • Utiliser isinstance() Et len() Méthodes dans la boucle For pour vérifier si la liste donnée est imbriquée ?
  • Utiliser le numpy bibliothèque pour vérifier si la liste donnée est imbriquée ?

Avec cela, nous arrivons à la fin de cet article; veuillez vous abonner et restez à l'écoute pour des articles plus intéressants !