Maison > développement back-end > Tutoriel Python > Comment filtrer des éléments dans une séquence en Python

Comment filtrer des éléments dans une séquence en Python

不言
Libérer: 2018-10-22 17:20:48
avant
2503 Les gens l'ont consulté

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])
Copier après la connexion

Résultat :

[1, 4, 10, 2, 3]
[-5, -7, -1]
Copier après la connexion

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)
Copier après la connexion

Résultat :

1
4
10
2
3
Copier après la connexion

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)
Copier après la connexion

Résultat. :

['1', '2', '-3', '4', '5']
Copier après la connexion

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])
Copier après la connexion

Résultat :

[1.0, 2.0, 3.1622776601683795, 1.4142135623730951, 1.7320508075688772]
Copier après la connexion

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])
Copier après la connexion

Résultat :

[1, 4, 0, 10, 0, 2, 3, 0]
[0, 0, -5, 0, -7, 0, 0, -1]
Copier après la connexion

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=[
&#39;5412 N CLARK1&#39;,
&#39;5148 N CLARK2&#39;,
&#39;5800 E CLARK3&#39;,
&#39;2122 N CLARK4&#39;,
&#39;5645 M CLARK5&#39;,
&#39;1060 W CLARK6&#39;,
]
counts=[0,3,10,4,1,7]
#构建一个列表,它相应的count值要大于5
more5=[n>5 for n in counts]
print(more5)

print(list(compress(address,more5)))
Copier après la connexion

Résultat :

[False, False, True, False, False, True]
['5800 E CLARK3', '1060 W CLARK6']
Copier après la connexion

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal