Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

Freigeben: 2023-07-25 16:54:12
nach vorne
4080 Leute haben es durchsucht

1. Einführung

List Comprehensions, eine sehr einfache, aber leistungsstarke integrierte Python-Generierung, die zum Erstellen von Listen verwendet werden kann.


2. Fallanalyse

Drei Methoden

Zum Erstellen einer Liste [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] können Sie verwenden Liste(Bereich(1, 11)).

print(list(range(1, 11)))
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

Was ist, wenn Sie [1x1, 2x2, 3x3, …, 10x10] generieren möchten?

1. Methode eins ist eine Schleife:
L = []
for x in range(1, 11):
    L.append(x * x)
print(L)
Nach dem Login kopieren

Aber die Schleife ist zu umständlich und die Listengenerierungsmethode kann eine einzeilige Anweisung anstelle einer Schleife verwenden, um die obige Liste zu generieren:

print([x * x for x in range(1, 11)])
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

写列表生成式时,把要生成的元素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])
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

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


print( [m + n for m in 'ABC' for n in 'XYZ'])
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

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

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

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

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


print([d for d in os.listdir('.')])  # os.listdir可以列出文件和目录
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

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

d = {'x': 'A', 'y': 'B', 'z': 'C'}
for k, v in d.items():
    print(k, '=', v)
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

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

d = {'x': 'A', 'y': 'B', 'z': 'C' }
print([k + '=' + v for k, v in d.items()]
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

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

L = ['Hello', 'World', 'IBM', 'Apple']
print([s.lower() for s in L])
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

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

L = ['Hello', 'World', 18, 'Apple', None]
print([s.lower() for s in L])
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

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

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


print(isinstance(y, str))
Nach dem Login kopieren

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung


三、练习和思考

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

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


# 期待输出: ['hello', 'world', 'apple']
print(L2)
Nach dem Login kopieren

练习参考代码 :

L2 =[s.lower() for s in L1 if isinstance(s, str) ]
Nach dem Login kopieren

运行结果:

Bestandsaufnahme von drei Methoden zur Python-Listengenerierung

注:

Mit der Listengenerierung können Sie schnell eine Liste generieren und aus einer Liste eine andere Liste ableiten, der Code ist jedoch sehr prägnant.

4. Zusammenfassung

Dieser Artikel basiert auf den Grundlagen von Python und führt in die Listengenerierung ein, wobei der Schwerpunkt auf Fällen liegt und drei Methoden erläutert werden.

Analysieren Sie verschiedene Methoden, um den gleichen Effekt zu erzielen. Punkte, die Aufmerksamkeit erfordern, und Schwierigkeiten, die in konkreten Fällen auftreten, werden aufgeführt und wirksame Lösungen bereitgestellt. Schließlich können Sie durch Übung und Nachdenken Ihr Verständnis der Listenerstellung vertiefen.

Das obige ist der detaillierte Inhalt vonBestandsaufnahme von drei Methoden zur Python-Listengenerierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:Go语言进阶学习
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage