python之4高级特性

4.1 切片
对于列表和元组,通过list[i:j]访问的操作就是切片操作
如,L=[1,2,3,4,5,6,7,8,9]

  • 获取第1个到第3个(数组下标从0开始,切片是左闭右开的区间,也就是包含0,不包含3)
L[0:3]
  • 获取第2个到第五个
L[1:5]
  • 取倒数第5个到倒数第2个
L[-5:-1]
  • 取第2个到最后一个
L[1:]
  • 前5个数,每2个取一个
L[:5:2]
  • 所有数,每个两个取一个
L[::2]

能进行切片的类型:

  • 字符串
  • 列表
  • 元组
    注意:集合、字典不能进行切片操作

4.2 列表生成式
生成式的基本语法:
[expr for iter_var in iterable]
[expr for iter_var in iterable if cond_expr]

  • 生成一个10个元素的数据,每个分别对应 1-10的两倍
my_list = [x * 2 for x in range(1, 11)]
print(my_list)
  • 生成一个100以内所有偶数的列表
my_list = [x for x in range(1, 101) if x % 2 == 0]
print(my_list)
  • 使用列表生成式生成[[1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5]] 这
    样的列表
my_list = [[x, y] for x in range(1, 3) for y in range(6)]
print(my_list)

4.3 迭代
迭代就是使用for循环,在python中,只要是可迭代的对象,无论有没有下标,都可以进行迭代

  • 判断一个对象是否可以迭代
from collections.abc import Iterable
print(isinstance('aaa', Iterable))

其中,
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
sinstance() 与 type() 区别:

  • type() 不会认为子类是一种父类类型,不考虑继承关系。
  • isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

  • 可迭代对象里的数据成对出现,想要一次性遍历出两个对象
for x, y in [(1, 2), (4, 5)]:
  print(x,"+",y,"=", x + y)

4.4生成器
通过列表生成式,可以直接创建一个列表,但是,受到内存的限制,列表容量是有限的,当列表元素很大的时候,会很浪费内存空间。所以可以通过生成器 Generator 生成。
生成器是一种一边循环一边计算的机制。相比于列表生成式,只需将最外层的[ ]换成( )即可。随着变换,返回的类型也随着变动

  • 列表生成式,返回的是list:
print(type([x * 2 for x in range(1, 11)]))
  • 生成器,返回的是generator类型:
print(type((x * 2 for x in range(1, 11))))

生成器的使用:

  • 直接使用next(generator)
range_= (x * 2 for x in range(1, 11))
print(next(range_))
print(next(range_))
print(next(range_))
print(next(range_))

缺点:有多少个可获取的元素不可预估,当超出范围之后,会报StopIteration

  • 循环使用
range_ = (x * 2 for x in range(1, 11))
for i in range_:
    print(i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_Huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值