Inventaire de trois méthodes de génération de listes Python

Libérer: 2023-07-25 16:54:12
avant
4093 Les gens l'ont consulté

1. Introduction

List Comprehensions, une génération Python intégrée très simple mais puissante qui peut être utilisée pour créer des listes.


2. Analyse de cas

Trois méthodes

Pour générer la liste [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] vous pouvez utiliser liste (plage (1, 11)).

print(list(range(1, 11)))
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python

Et si vous souhaitez générer [1x1, 2x2, 3x3, …, 10x10] ?

1. La première méthode consiste à boucler :
L = []
for x in range(1, 11):
    L.append(x * x)
print(L)
Copier après la connexion

Mais la boucle est trop lourde et la méthode de génération de liste peut utiliser une instruction sur une ligne au lieu d'une boucle pour générer la liste ci-dessus :

print([x * x for x in range(1, 11)])
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用,多写几次,很快就可以熟悉这种语法。

for循环后面还可以加上if判断,这样就可以筛选出仅偶数的平方:

for x in range(1, 11):
    L.append(x * x)


print([x * x for x in range(1, 11) if x % 2 == 0])
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python

2. 使用两层循环,可以生成全排列
L = []
for x in range(1, 11):
    L.append(x * x)


print( [m + n for m in 'ABC' for n in 'XYZ'])
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python

三层和三层以上的循环就很少用到了。

3. 运用列表生成式,可以写出非常简洁的代码。

例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

import os  # 导入os模块,模块的概念后面讲到


print([d for d in os.listdir('.')])  # os.listdir可以列出文件和目录
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python

for循环其实可以同时使用两个甚至多个变量,s比如dict的items()可以同时迭代key和value:

d = {'x': 'A', 'y': 'B', 'z': 'C'}
for k, v in d.items():
    print(k, '=', v)
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python

因此,列表生成式也可以使用两个变量来生成list:

d = {'x': 'A', 'y': 'B', 'z': 'C' }
print([k + '=' + v for k, v in d.items()]
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python

最后把一个list中所有的字符串变成小写:

L = ['Hello', 'World', 'IBM', 'Apple']
print([s.lower() for s in L])
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python

如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:

L = ['Hello', 'World', 18, 'Apple', None]
print([s.lower() for s in L])
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python

使用内建的isinstance函数可以判断一个变量是不是字符串:

x = 'abc'
y = 123
print(isinstance(x, str))


print(isinstance(y, str))
Copier après la connexion

Inventaire de trois méthodes de génération de listes Python


三、练习和思考

请修改列表生成式,通过添加if语句保证列表生成式能正确地执行。

# -*- coding: utf-8 -*-
L1 = ['Hello', 'World', 18, 'Apple', None]
L2=???


# 期待输出: ['hello', 'world', 'apple']
print(L2)
Copier après la connexion

练习参考代码 :

L2 =[s.lower() for s in L1 if isinstance(s, str) ]
Copier après la connexion

运行结果:

Inventaire de trois méthodes de génération de listes Python

注:

En utilisant la génération de liste, vous pouvez générer rapidement une liste et dériver une autre liste à partir d'une liste, mais le code est très concis.

4. Résumé

Cet article est basé sur les bases de Python et présente la génération de listes, en se concentrant sur les cas et en expliquant trois méthodes.

Analysez différentes méthodes pour obtenir le même effet. Les points qui nécessitent une attention particulière et les difficultés rencontrées dans des cas réels sont présentés et des solutions efficaces sont proposées. Enfin, grâce à la pratique et à la réflexion, vous pouvez approfondir votre compréhension de la génération de listes.

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:Go语言进阶学习
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