Python学习07:高级特性

本文学习Python的笔记,仅供参考


本文介绍一下Python的高级特性:切片,迭代,列表生成器,生成器

切片

对于List和tuple数据结构,会经常取其中的部分进行操作,如L = [1,2,3,4,5,6] ,取前三个元素,这样的话需要L[0],L[1],L[2] 这样操作才能依次取出,如果多的话比较繁琐。Python中的切片功能就很nice的完成这个任务

L = [22,33,44,55,66,77,88,99]
print(L[0:3])
输出结果:

======================== RESTART: E:/python/Slice.py ========================
[22, 33, 44]
可见L[0:3]代表从索引0开始取元素,直到3为止,但是不包括3,位0,1,2的对应的数据。

当然索引页可以不从0开始 如 L[1,3] ,则取出33,44

>>> L = [22,33,44,55,66,77,88,99]
>>> L[1:3]
[33, 44]
可不可以到这取,当然也是犀利的可以,方便上完全碾压C语言,-1代表最后一个了

>>> L[-1]
99
那取后几个个呢? L[-5:-2]

>>> L[-5:-2]
[55, 66, 77]
有了切片操作,很多地方循环就不再需要了。Python的切片非常灵活,一行代码就可以实现很多行循环才能完成的操作。

迭代

如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

在Python中,迭代是通过for ... in来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的。比如代码

L=[22,33,44,55,66,77,88,99]
i =0
for i in L:
    print(i)
完成迭代遍历

====================== RESTART: E:/python/Iteration.py ======================
22
33
44
55
66
77
88
99

列表生成式

这个主要解决如何生成List的,一般情况下我们使用,我们看到这个比较有规律的,连续的数字,那比较复杂的呢?

>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

比如我要生成一个[1x1,2x2,3x3 ... 10x10]的列表,可以运用列表生成式

>>> [x*x for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:

>>> import os
>>> [d for d in os.listdir('.')]
['a.py', 'function.py', 'Iteration.py', 'qiepian.py', 'Slice.py', 'test.py', 'while.py']

生成器

在Python中,这种一边循环一边计算的机制,称为生成器:generator。实际上这个就是一个动态的生成list,一次生成过多的而不用浪费内存空间。

上面生成列表的[]修改为()即可生成g

>>> g= (x*x for x in range(1,11))
>>> g
<generator object <genexpr> at 0x00000057B167CFC0>
这样生成了一个generator,我们看到的应该是一个地址,可以通过next函数打印list中的每一个元素,一直到最后一个元素

>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> next(g)
16
>>> next(g)
25
>>> next(g)
36
>>> next(g)
49
>>> next(g)
64
>>> next(g)
81
>>> next(g)
100
>>> next(g)
Traceback (most recent call last):
  File "<pyshell#24>", line 1, in <module>
    next(g)
StopIteration
当然是用next 太复杂了,可以使用for循环遍历了。










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值