美文网首页
python 高级特性

python 高级特性

作者: super静_jingjing | 来源:发表于2018-06-08 18:04 被阅读0次

1.切片
对取数据很方便,如取一个list的前n个元素,没有接触到切片的,可以使用循环,但是用切片就会很简单:

arr = ["java" , "python","C++","C#"];
arr[0:2];  //list[ 起始位置 : 知道该位置停止但是不包括]
//结果  ['java', 'python']
arr[1:2];  
//结果  ['python']

也支持倒数切片,但是倒数的索引从-1开始
arr[-2 , -1] >>> >>> ['python']
arr[-2:] >>> >>> ['python', 'C++']
如果什么都不写,直 arr [:] , 可以原样赋值一个list
以下还有一些高级应用

// 前10个数,每两个取一个:
arr [:10:2]
//所有数,每5个取一个:
arr [::5]

truple也可以同样的方式使用切片;一个字符串也可以使用切片来分割字符串

 'ABCDEFG'[:3]
// 结果  'ABC'
'ABCDEFG'[::2]
// 结果  'ACEG'
  1. 迭代
    用for循环来遍历list或者truple,这种遍历方式就称为迭代
    truple和list以及dict都可以用for...in的方式进行迭代,但是python的循环不像java用下标的方式
    如果想要用下标的方式进行迭代可以使用enumerate将list转变成索引+元素
 for i, value in enumerate(['1', '2', '3']):
      print(i, value)
...
  1. 列表生成式
    用来创建list
    生成一个[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11))
    image.png
    生成一个[11, 22, 33, 44, 55, 66, 77, 88, 99, 1010]
>>> [x*x for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

也可以使用两层循环

>>> [m+n for m in 'abc' for n in 'de']
['ad', 'ae', 'bd', 'be', 'cd', 'ce']

for循环后面还可以加上if判断

>>> [m for m in 'abc' if  m!='b']
['a', 'c']

4.生成器
一边循环一边计算的机制,称为生成器:generator。
创建:列表生成是[] ,生成器是()

>>> (x*x for x in range(1,11))
<generator object <genexpr> at 0x0000000001DF0BF8>

打印出generator的每一个元素,使用next()

>>> g=(x*x for x in range(1,11))
>>> g
<generator object <genexpr> at 0x0000000001DF0BA0>
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>>

计算到没有元素之后将会抛出异常StopIteration
也可使用for循环遍历generator

>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x0000000001DF0CA8>
>>> for n in g:
...     print(n)
...
0
1
4
9
16
25
36
49
64
81

generator还可以用函数的方式,如果一个函数中有yield 关键字,就说明这个函数不是普通函数,而是generator
generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

>>> def odd():
...     print('step 1')
...     yield 1
...     print('step 2')
...     yield(3)
...     print('step 3')
...     yield(5)
...
>>> o=odd()
>>> next(o)
step 1
1
>>> next(o)
step 2
3
>>> next(o)
step 3
5
>>> next(o)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

同样的,把函数改成generator后,不会真的去使用next()去获取下一个值,很麻烦,而是用for循环来迭代:

>>> def fib(max):
...     n, a, b = 0, 0, 1
...     while n < max:
...         yield b
...         a, b = b, a + b
...         n = n + 1
...     return 'done'
...
>>> for n in fib(6):
...     print(n)
...
1
1
2
3
5
8

5 迭代器
可以直接使用for循环的数据类型有:
1). 集合数据类型,如list、tuple、dict、set、str等;
2). generator,包括生成器和带yield的generator 函数。
这些可以直接用for循环的对象都成为可迭代对象:Iterable
可以用isinstance判断对象是否是可迭代对象

>>> from collections import Iterable
>>> isinstance([], Iterable)
True
>>> isinstance({}, Iterable)
True

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
可以用isinstance判断对象是否是Iterator对象
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。
把list、dict、str等Iterable变成Iterator可以使用iter()函数:

>>> from collections import Iterator
>>> isinstance(iter([]), Iterator)
True

相关文章

  • Python学习(三)

    Python的高级特性 python中有很多高级特性,比起C/C++来说要简单许多,运用起来十分方便。 切片 通常...

  • Python高级特性

    切片slice取指定索引范围的操作:[0:10:2]-->意为从第一个元素到第11个元素,元素之间隔2 迭代ite...

  • python 高级特性

    1.切片对取数据很方便,如取一个list的前n个元素,没有接触到切片的,可以使用循环,但是用切片就会很简单: 也支...

  • Python高级特性

    切片 迭代 列表生成式 生成器 generator generator:按照某种算法推算出来结果,是一种一边循环一...

  • Python——高级特性

    #!/usr/bin/python # -*- coding:UTF-8 -*- __author__ = 'wx...

  • python高级特性

    python高级特性 iteration迭代 对list,tuple的遍历被称为迭代。对list实现类似Java那...

  • python高级特性

    一、列表生成器 1. 形式: [表达式 for ... in 可迭代类型 [if expression] ] 2....

  • Python 高级特性

    切片 迭代 列表生成式 生成器 迭代器

  • Python高级特性

    掌握了Python的数据类型、语句和函数,基本上就可以编写出很多有用的程序了。 比如构造一个1, 3, 5, 7,...

  • python高级特性

    1、切片(slice)L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3...

网友评论

      本文标题:python 高级特性

      本文链接:https://www.haomeiwen.com/subject/wtmosftx.html