Maison >développement back-end >Tutoriel Python >Comment filtrer des éléments dans une séquence en Python
Le contenu de cet article explique comment Python filtre les éléments dans une séquence. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
1. Exigences
La séquence contient certaines données, nous devons extraire les valeurs ou supprimer la séquence selon certaines normes,
2. Solution
Pour filtrer les données dans une séquence, le moyen le plus simple est généralement d'utiliser une compréhension de liste.
Par exemple :
myList=[1,4,-5,10,-7,2,3,-1] print([n for n in myList if n>0]) print([n for n in myList if n<0])
Résultat :
[1, 4, 10, 2, 3] [-5, -7, -1]
Un inconvénient potentiel de l'utilisation des compréhensions de liste est que si l'entrée d'origine est très volumineuse, elle mai produira un résultat énorme. Si c'est quelque chose que vous devez prendre en compte, vous pouvez utiliser une expression génératrice pour produire des résultats filtrés de manière itérative, par exemple :
myList=[1,4,-5,10,-7,2,3,-1] pos=(n for n in myList if n >0) for x in pos: print(x)
Résultat :
1 4 10 2 3
Parfois, les critères filtrés ne peuvent pas être exprimés simplement dans des compréhensions de listes ou des expressions génératrices. Par exemple : supposons que le processus de filtrage implique la gestion des exceptions ou d’autres détails complexes. Sur cette base, vous pouvez placer le code qui gère la logique de filtrage dans une fonction distincte, puis utiliser la fonction filter() intégrée pour le traiter. L'exemple est le suivant :
values=['1','2','-3','-','4','N/A','5'] def is_int(val): try: x=int(val) return True except ValueError: return False ivals=list(filter(is_int,values)) print(ivals)
Résultat. :
['1', '2', '-3', '4', '5']
filter() crée un itérateur, donc si nous voulons le résultat sous forme de liste, assurez-vous d'inclure list(), comme dans l'exemple.
3. Analyse
Les compréhensions de listes et les expressions génératrices sont généralement le moyen le plus simple et le plus direct de filtrer les données. De plus, ils ont également la capacité de transformer les données simultanément. Par exemple :
import math myList=[1,4,-5,10,-7,2,3,-1] print([math.sqrt(n) for n in myList if n>0])
Résultat :
[1.0, 2.0, 3.1622776601683795, 1.4142135623730951, 1.7320508075688772]
Concernant le filtrage des données, une situation consiste à remplacer les valeurs qui ne répondent pas aux critères par de nouvelles valeurs au lieu de les supprimer. eux. Par exemple. En plus de rechercher des entiers positifs, nous souhaitons également remplacer les valeurs qui ne répondent pas aux exigences dans une plage spécifiée. Souvent, cela est facilement accompli en déplaçant le filtre dans une expression conditionnelle, comme ceci :
myList=[1,4,-5,10,-7,2,3,-1] print([n if n>0 else 0 for n in myList]) print([n if n<0 else 0 for n in myList])
Résultat :
[1, 4, 0, 10, 0, 2, 3, 0] [0, 0, -5, 0, -7, 0, 0, -1]
Un autre outil à mentionner. L'outil de filtre est itertools.compress() , qui accepte un itérable et une séquence de sélecteurs booléens en entrée. En sortie, il donne tous les éléments d'objet itérables qui sont True dans le sélecteur booléen correspondant. Ceci est utile si vous souhaitez appliquer les résultats d'un filtre sur une séquence à une autre séquence associée.
Par exemple :
from itertools import compress address=[ '5412 N CLARK1', '5148 N CLARK2', '5800 E CLARK3', '2122 N CLARK4', '5645 M CLARK5', '1060 W CLARK6', ] counts=[0,3,10,4,1,7] #构建一个列表,它相应的count值要大于5 more5=[n>5 for n in counts] print(more5) print(list(compress(address,more5)))
Résultat :
[False, False, True, False, False, True] ['5800 E CLARK3', '1060 W CLARK6']
La clé ici est de créer d'abord une séquence booléenne pour représenter quel élément satisfait nos conditions, puis Le La fonction compress() sélectionne les éléments correspondants dont la valeur booléenne est True.
Semblable à la fonction filter(), compress() renverra un itérateur dans des circonstances normales. Par conséquent, si nécessaire, vous devez utiliser list() pour convertir le résultat en liste.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!