列表解析式重要的思想:
根据某种特征的对象生成一个指定的序列链表
想想其实说的挺有道理,我生成一个链表就是为了简单,为什么要写的那么复杂来生成链表。
一:一般列表解析式
生成一个 平方列表
squares = []
for x in range(10):
squares.append(x**2)
列表推导式:
squares = [x**2 for x in range(10)]
二 整除3的列表
numbers = []for x in range(100):
if x % 3 == 0:
numbers.append(x)
列表解析式
numbers = [x for x in range(100) if x % 3 == 0]
二:列表解析式 (两个 for语句)
质数的序列
noprimes = []
for i in range(2, 8):
for j in range(i*2, 50, i):
noprimes.append(j)
primes = []
for x in range(2, 50):
if x not in noprimes:
primes.append(x)
用两个列表推导式
noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)]
primes = [x for x in range(2, 50) if x not in noprimes]
案列二 : 生成如下数组
matrix = [[0,1,2,3], [4,5,6,7], [8,9,10,11]]
flattened = []
for row in matrix:
for i in row:
flattened.append(i)
列表解析式法:
flattened = [i for row in matrix for i in row]
三:列表解析式中 中加 if 语句判断
实例 : 获得当前文件夹中所有的以.txt为结尾的文件 列表
import os
files = []for f in os.listdir('./my_dir'):
if f.endswith('.txt'):
files.append(f)
列表解析式法(加 if 语句):
import os
files = [f for f in os.listdir('./my_dir') if f.endswith('.txt')]
四:列表解析中 双重For语句 双重if语句
result = [(x,y)
for x in range(10)
for y in range(10)
if x + y == 5
if x > y]