Python高级特性 day4

2024-07-26 17:02:14 浏览数 (2)

切片Slice

取列表或元组中的元素

代码语言:python代码运行次数:0复制
L[0:n] #取索引0到n-1个元素
L[:n]  #0可以省略
L[-2:] #支持倒数切片


#几个几个取
L[::5] #所有数,每5个取一个


#元组和字符串也可以类似取
(0, 1, 2, 3, 4, 5)[:3]
'ABCDEFG'[::2]

迭代

如何判断一个对象是可迭代对象呢?方法是通过collections.abc模块的Iterable类型判断:

代码语言:python代码运行次数:0复制
from collections.abc import Iterable
isinstance(123, Iterable)
False

list或tuple的迭代

list或tuple的遍历就是迭代,借助for in循环

代码语言:python代码运行次数:0复制
for i in L:
    return
}
#带索引和元素的迭代
for i, value in enumerate(['A', 'B', 'C']):
...     print(i, value)
...
0 A
1 B
2 C

dict的迭代

因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样

代码语言:python代码运行次数:0复制
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
...     print(key) #迭代key

for value in d.values() #迭代value
for k, v in d.items() # 同时迭代key和value

字符串的迭代

代码语言:python代码运行次数:0复制
for ch in 'ABC':
...     print(ch)

练习

迭代查找一个list中最小和最大值,并返回一个tuple

代码语言:python代码运行次数:0复制
import random
def FindMinAndMax(L):
    if L == []:
        return (None,None)
    else:
        min = L[0]  #索引第一个元素很巧妙
        max = L[0]
        for i in L:
            if i < min:
                min = i
            elif i > max:
                max = i
    return (min,max)

列表生成式

列表生成式相当于把for循环生成的列表进行简化,do的内容提前

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来

x * x for x in range(1, 11)

for循环后面还可以加上if判断,是一个筛选条件,不能跟else

x * x for x in range(1, 11) if x % 2 == 0

生成器 generator

要创建一个generator,只要把一个列表生成式的[]改成(),但区别于打印元素:

生成器打印元素两种方法

  • next()函数可以获得generator的下一个返回值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误

  • 借助for循环,也不用关心StopIteration的问题
代码语言:python代码运行次数:0复制
for n in g:
...     print(n)

生成器函数

一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator函数

迭代器

  • next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
  • list、dict、str虽然是Iterable,却不是Iterator
  • 把list、dict、str等Iterable变成Iterator可以使用iter()函数
  • 所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算
  • Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的

0 人点赞