Introduction aux fonctions intégrées courantes de Python

巴扎黑
Libérer: 2017-09-07 09:42:17
original
1310 Les gens l'ont consulté

Les fonctions dites intégrées peuvent être utilisées directement sans importation. L'article suivant présente principalement certaines fonctions intégrées courantes pour l'apprentissage de base de Python. L'article vous les présente en détail à travers un exemple de code. Les amis dans le besoin peuvent s'y référer.

Préface

Python fournit de nombreuses fonctions intégrées pour gérer de nombreux types. La fonction de ces fonctions intégrées est qu'elles peuvent souvent. Effectuez des opérations similaires sur plusieurs types d'objets, c'est-à-dire des opérations communes à plusieurs types d'objets. Je n'entrerai pas dans les détails ci-dessous.

map()

La fonction map() accepte deux paramètres, l'un est une fonction et l'autre est un objet itérable (Iterable) , map Applique tour à tour la fonction passée à chaque élément de l'objet itérable et renvoie le résultat en tant qu'itérateur.

Par exemple, il existe une fonction f(x)=x^2 , et vous souhaitez appliquer cette fonction à un list[1,2,3,4,5,6,7,8,9] :

À l'aide d'une simple boucle, vous pouvez réaliser :


>>> def f(x):
...  return x * x
...
L = []
for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
 L.append(f(n))
print(L)
Copier après la connexion

Utiliser des fonctions d'ordre supérieur map():


>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
Copier après la connexion

Le résultat r est un itérateur, itérateur C'est une séquence paresseuse. Utilisez la fonction list() pour la laisser calculer la séquence entière et renvoyer une liste.

Si vous souhaitez convertir tous les nombres de cette liste en chaînes, c'est facile à utiliser map() :


>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
Copier après la connexion

Petit exercice : Utilisez la fonction map() pour changer le nom anglais non standard saisi par l'utilisateur en un nom standard avec la première lettre en majuscule et le reste en minuscule. Entrée['adam', 'LISA', 'barT'],Sortie['Adam', 'Lisa', 'Bart']


def normalize(name):
  return name.capitalize()

 l1=["adam","LISA","barT"]
 l2=list(map(normalize,l1))
 print(l2)
Copier après la connexion

réduire()

reduce() La fonction accepte également deux paramètres, l'un est une fonction et l'autre est un objet itérable. Réduire effectuera un calcul cumulatif sur le résultat de l'application de la fonction passée à chaque élément de l'objet itérable. Renvoyez ensuite le résultat final.

L'effet est : reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

Par exemple, convertissez la séquence [1,2,3,4,5] en l'entier 12345 :


>>> from functools import reduce
>>> def fn(x, y):
...  return x * 10 + y
...
>>> reduce(fn, [1, 2, 3, 4, 5])
12345
Copier après la connexion

Petit exercice : Ecrire une fonction prod() qui peut accepter une liste et utiliser réduire pour calculer le produit :


from functools import reduce
def pro (x,y):
  return x * y
 def prod(L):
  return reduce(pro,L)
 print(prod([1,3,5,7]))
Copier après la connexion

map() et reduce() Exercice complet : Écrivez la fonction str2float pour convertir la chaîne '123.456' en type à virgule flottante 123.456


CHAR_TO_FLOAT = {
 '0': 0,'1': 1,'2': 2,'3': 3,'4': 4,'5': 5,'6': 6,'7': 7,'8': 8,'9': 9, '.': -1
}
def str2float(s):
 nums = map(lambda ch:CHAR_TO_FLOAT[ch],s)
 point = 0
 def to_float(f,n):
   nonlocal point
   if n==-1:
    point =1
    return f
   if point ==0:
    return f*10+n
   else:
    point =point *10
    return f + n/point

 return reduce(to_float,nums,0)#第三个参数0是初始值,对应to_float中f
Copier après la connexion

filter() La fonction

filter() est utilisée pour filtrer la séquence filter() accepte également une fonction et une séquence filter() applique la fonction passée à chaque élément à tour de rôle, puis détermine. le fait que la valeur de retour soit True ou False décide de conserver ou de supprimer l'élément.

Par exemple, supprimez les nombres pairs dans la liste :


def is_odd(n):
 return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]
Copier après la connexion

Petit exercice : Utilisez filter() pour trouver les nombres premiers nombres

Une façon de calculer les nombres premiers est la méthode du tamis d'Ehrlich. Son algorithme est très simple à comprendre :

Tout d'abord, listez tous les nombres naturels à partir de 2 et construisez. une séquence :

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

Prenez le premier nombre 2 de la séquence, qui doit être un nombre premier, puis utilisez 2 pour filtrer les multiples de 2 dans la séquence :

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

Obtenez le premier nombre de la nouvelle séquence 3, il doit s'agir d'un nombre premier, puis utilisez 3 pour filtrer les multiples de 3 dans la séquence :

5, 6, 7, 8, 9 , 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

Prenez le premier chiffre 5 de la nouvelle séquence, puis utilisez 5 pour filtrer les multiples de 5 dans la séquence :

7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

Continuez à filtrer et vous obtiendrez tous les nombres premiers.

Utilisez Python pour implémenter cet algorithme. Construisez d'abord une séquence de périodes à partir de 3 :


def _odd_iter(): 
n = 1
 while True:
  n = n + 2
  yield n
#这是一个生成器,并且是一个无线序列
Copier après la connexion

Définissez une fonction de filtre. :


def _not_pisible(n):
 return lambda x: x % n > 0
Copier après la connexion

Définir un générateur pour renvoyer en continu le prochain nombre premier :


def primes():
 yield 2
 it = _odd_iter() # 初始序列
 while True:
  n = next(it) # 返回序列的第一个数
  yield n
  it = filter(_not_pisible(n), it) # 构造新序列
Copier après la connexion

Imprimer 100 Nombres premiers à l'intérieur de :


for n in primes():
 if n < 100:
  print(n)
 else:
  break
Copier après la connexion

sorted()

Python intégré sorted() la fonction peut trier la liste :


>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
Copier après la connexion

sorted() La fonction est également une fonction d'ordre supérieur et peut également accepter une fonction clé pour implémenter un tri personnalisé :


>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
Copier après la connexion

La fonction spécifiée par key sera appliquée à chaque élément de la liste et triée en fonction du résultat renvoyé par la fonction key.

默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。如果想忽略大小写可都转换成小写来比较:


>>> sorted([&#39;bob&#39;, &#39;about&#39;, &#39;Zoo&#39;, &#39;Credit&#39;], key=str.lower)
[&#39;about&#39;, &#39;bob&#39;, &#39;Credit&#39;, &#39;Zoo&#39;]
Copier après la connexion

要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True


>>> sorted([&#39;bob&#39;, &#39;about&#39;, &#39;Zoo&#39;, &#39;Credit&#39;], key=str.lower, reverse=True)
[&#39;Zoo&#39;, &#39;Credit&#39;, &#39;bob&#39;, &#39;about&#39;]
Copier après la connexion

小练习:假设我们用一组tuple表示学生名字和成绩:L = [(&#39;Bob&#39;, 75), (&#39;Adam&#39;, 92), (&#39;Bart&#39;, 66), (&#39;Lisa&#39;, 88)] 。用sorted()对上述列表分别按c成绩从高到低排序:


L = [(&#39;Bob&#39;, 75), (&#39;Adam&#39;, 92), (&#39;Bart&#39;, 66), (&#39;Lisa&#39;, 88)]
def by_score(t):
 for i in t:
   return t[1]
L2=sorted(L,key= by_score)
print(L2)
Copier après la connexion

运用匿名函数更简洁:


L2=sorted(L,key=lambda t:t[1])
print(L2)
Copier après la connexion

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:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!