三元表达式、列表解析、生成器
本人只是初学阶段,在学习过程中的一些笔记。想借此平台也分享给刚刚学习的朋友,如有错的地方欢迎各位大神与高手指点。
三元表达式
例一:比较大小
x=3
y=2
res='aaaaa' if x > y else 'bbbbbbb'
print(res)
例二:在函数中的应用
def max2(x, y):
return x if x > y else y
print(max2(2, 3))
列表解析器:(很占用资源)
例一:把某个文件夹中log后缀结尾的文件放到l2列表中
import os
l1 = os.listdir('/var/log')
l2 = [i for i in l1 if i.endswith('.log')]
print(l2)
例二:把l1列表中的每个元素都和l2中的元素配套一次
l1 = ["x", "y", "z"]
l2 = [1, 2, 3]
l3 = [(i, j) for i in l1 for j in l2]
print(l3)
例三:把l1列表中的每个元素都和l2中的元素配套一次,但排除l2中的1
l1 = ["x", "y", "z"]
l2 = [1, 2, 3]
l3 = [(i, j) for i in l1 for j in l2 if j != 1]
print(l3)
例子四:列表解析,将l1列表中的每个数值的平方值输入到l2中
l1 = [1, 3, 5, 7, 9]
l2 = [i ** 2 for i in l1]
print(l2)
例子五:生成一个新列表,里面的值是1到10的平方除以2的结果
for j in [i ** 2 for i in range(1, 11)]:
print(j/2)
生成一个新列表,里面的值是1到10的偶数平方除以2的结果。如果是奇数的话即用!=0
for j in [i ** 2 for i in range(1, 11) if i % 2 == 0]:
print(j / 2)
生成器:(每次只获取一个元素)
例一:生成一个新的生成器,里面的值是1到10的平方除以2的结果
g1 = (i ** 2 for i in range(1, 11))
print(g1.__next__()) #每次只取一个元素,占用内存少
或者
g1 = (i ** 2 for i in range(1, 11))
for i in g1:
print(i)#每次只取一个元素,占用内存少
或者
g1 = (i ** 2 for i in range(1, 11))
print(list(g1)) # 直接在一个列表中列出所有元素,缺点是占用内存多
例二:生成一个新生成器,里面的值是1到10的平方除以2的结果
for j in (i ** 2 for i in range(1, 11)):
print(j / 2)
例三:当y小于x时,循环输出y的值
def f1(x): # 定义一个函数
y = 0 # y由0开始
while y <= x:# 循环,当y小于或等于x的值时就停止循环
yield y # 当循环走到这里时会暂停,输出结果
y += 1 # 在原来的值上+1再继续循环
for i in f1(10):
print(i)
例四:输出1~20的平方值
def mun(n): # 定义函数
i = 1 # 给i赋值
while i <= n: # 循环,当i小于或等于n的值时就停止循环
yield i ** 2 # 当循环走到这里时会暂停,输出结果
i += 1 # 在原来的值上+1再继续循环
l2 = []
for i in mun(20): # 定义函数的值为20
print(i) # 可以直接输出结果
l2.append(i) # 也可以将i的所有结果先插入l2列表中
print(l2) # 然后输出l2列表,这样看起来比较好