Python高级特性——切片、列表生成式、生成器

前面的话:切片是Python非常强大的操作,适合于经常指定索引范围的操作,此时用循环时十分繁琐,但用Python提供的切片(Slice)操作符能大大简化这种操作。

我们先来看一个简单的示例,感受一下切片的强大。
假如我们要取一个list或者tuple中的部分元素,比如一个list如下:
`L = ["AFeng", "Javascript", "Python", "CSS", "HTML"]
取前三个元素,我们该怎么做?
最传统的方法:
这里写图片描述
但当我们需求改变时,这种方式就不再使用。比如取前n个元素。我们可是使用for循环实现。

>>> r = []
>>> n = 3
>>> for i in range(n):
    r.append(L[i])

>>> r
['AFeng', 'Javascript', 'Python']

针对这种繁琐的操作,我们使用切片,一行代码就可以实现等效的操作。

>>> L[0:3]
['AFeng', 'Javascript', 'Python']

注意:索引是从0开始的,且这种规则是包左不包右。也就是取的是下标为0、1、2的元素。到下标为3时已经截止了。
索引范围可以从任意开始到任意截止。
在Python中,最强大的之处莫过于支持负索引,因此,可以像下面这样操作。

>>> L[-3:] #那么省略的默认是什么呢?
['Python', 'CSS', 'HTML']

>>> L[-3:0]
[]
# 经过验证省略的默认是取到最后

注意点:倒数第一个元素的索引是-1。

切片参数详解:L【start, stop, step】分别代表的是起始、截止和步长。

如何复制一个列表到另一个列表。

>>> L[:]
['AFeng', 'Javascript', 'Python', 'CSS', 'HTML']

tuple也可以看成一种特殊的list,唯一区别就是tuple具有不可变性。也可以对其进行切片操作,只不过操作的结果仍是一个tuple。

同时字符串也是一种list,每一个元素就是一个字符。因此字符串也可以进行切片操作。操作的结果仍是一个字符串。

迭代:通过for循环遍历一个可迭代对象的方式称为迭代(Iteration)。
在Python中,迭代是通过for in来完成的。在很多其他语言中,遍历是通过下标完成的。这是因为Python的for循环的抽象程度更高。因为在Python中的for循环不仅可以用在list或者tuple上,还可以用在一切可迭代对象上,比如字符串,字典,集合等。

遍历一个字典:

>>> dicted = {
  "name": "AFeng", "age": 18, "love": "web"}
>>> for key in dicted:
    print(key)

name
age
love

从输出可以看到,默认情况下,对于字典来说,迭代是key,并且输出的顺序是任意的。但如果我们想迭代值,可以使用for value in dicted.values,如果同时迭代key和value,可以使用for k, v in dicted.items()。这种操作是把字典中的每一个键值对当做一个整体来处理。

当我们使用for循环时,只要作用于一个可迭代对象,for循环就能正常运行。

那么我们如何判断一个对象是不是可迭代对象了,方法是通过collections模块的Iterable类型来判断。具体如下:

>>> from collections import Iterable
>>>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值