Python学习笔记 (高级特性)
高级特性
1、切片
list和tuple可以快速取用其中的一段元素,写作list[n:m]。
正向索引:list[n:m]从索引号n取到索引号m-1,如果n是0可以省略。
反向索引:list[-n:]取倒数n个元素
带间隔的索引:list[n:m:k]从索引号n取到索引号m-1间隔是k
取所有数[:],间隔k取所有数[::k],翻转所有数[::-1]
2、迭代
对于list和tuple可以用for XX in XX来迭代。
例子:L=[1,2,'a']
for each in L:
print(each)
>>>1
2
a
对于dict可以用for XX in XX来迭代key,用for XX in XX.values()来迭代value,用for XX,YY in XX.items()同时迭代key,value。
字符串也可以迭代,每次迭代一个字符。
也可以同时迭代多个变量。
例子:L=[(1,1),(2,3),(3,4)]
for x,y in L:
print(x,y)
>>>1 1
2 3
3 4
3、列表生成器
使用[x表达式 for x in 可迭代对象 ]来生成list
例子:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [x * x for x in range(1, 11) if x % 2 == 0]#加上if得出偶数的平方
[4, 16, 36, 64, 100]
>>> [m + n for m in 'ABC' for n in 'XYZ']#使用两层for循环
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
4、生成器
创建列表需要一次性创建所有元素,占用很大空间。generator是一种类似的可迭代对 象,区别是不用一次性创建所有元素,在循环的时候才进行计算。
generator有两种生成方式:
1)列表生成器的[]改为()
例子:g = (x * x for x in range(10))
可以使用next()函数取得每一个返回值(很少用),或者使用for n in g取得返回值。
2)函数定义时,使用yield进行返回,在每次调用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
5、迭代器
可以用for循环迭代的对象是Iterable。Iterator是迭代器不但可以用for循环,还可以 被next()函数不断调用,直到没有数据时最后抛出StopIteration错误。
Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算,正是因为这种特 性Iterator可以表示一个无限大的数据流。
可以使用iter()函数获得Iterator对象。
1、切片
list和tuple可以快速取用其中的一段元素,写作list[n:m]。
正向索引:list[n:m]从索引号n取到索引号m-1,如果n是0可以省略。
反向索引:list[-n:]取倒数n个元素
带间隔的索引:list[n:m:k]从索引号n取到索引号m-1间隔是k
取所有数[:],间隔k取所有数[::k],翻转所有数[::-1]
2、迭代
对于list和tuple可以用for XX in XX来迭代。
例子:L=[1,2,'a']
for each in L:
print(each)
>>>1
2
a
对于dict可以用for XX in XX来迭代key,用for XX in XX.values()来迭代value,用for XX,YY in XX.items()同时迭代key,value。
字符串也可以迭代,每次迭代一个字符。
也可以同时迭代多个变量。
例子:L=[(1,1),(2,3),(3,4)]
for x,y in L:
print(x,y)
>>>1 1
2 3
3 4
3、列表生成器
使用[x表达式 for x in 可迭代对象 ]来生成list
例子:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> [x * x for x in range(1, 11) if x % 2 == 0]#加上if得出偶数的平方
[4, 16, 36, 64, 100]
>>> [m + n for m in 'ABC' for n in 'XYZ']#使用两层for循环
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
4、生成器
创建列表需要一次性创建所有元素,占用很大空间。generator是一种类似的可迭代对 象,区别是不用一次性创建所有元素,在循环的时候才进行计算。
generator有两种生成方式:
1)列表生成器的[]改为()
例子:g = (x * x for x in range(10))
可以使用next()函数取得每一个返回值(很少用),或者使用for n in g取得返回值。
2)函数定义时,使用yield进行返回,在每次调用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
5、迭代器
可以用for循环迭代的对象是Iterable。Iterator是迭代器不但可以用for循环,还可以 被next()函数不断调用,直到没有数据时最后抛出StopIteration错误。
Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算,正是因为这种特 性Iterator可以表示一个无限大的数据流。
可以使用iter()函数获得Iterator对象。
评论
发表评论