Python语法–推导或内含
list comprehension操作可以将一个序列类型的数据集推导出另一个序列类型的数据集:
典型的情况:
for i in aiterator
利用推导获取一个平方数列表
square = [ i * i for i in range ( 1 , 11 ) ]
for i in range ( 1 , 11 ) :
square. append( i * i)
字典推导语法如下格式:
{ key_exp: value_exp for key_exp, value_exp in aiterator}
keys = [ 'name' , 'age' , 'weight' ]
values = [ 'jiamin' , '28' , '81' ]
infoMap = { k: v for k, v in zip ( keys, values) }
推导+逻辑处理
使用if语句实现选择处理遍历的元素,如下语法规则:
for i in aiterator if . . .
{ key_exp: value_exp for key_exp, value_exp in aiterator if . . . }
square_odd = [ i * i for i in range ( 1 , 11 ) if i * i % 2 == 0 ]
infoMap_odd = { k: v for k, v in zip ( keys, values) if k == 'age' }
dict_one = { 'name' : 'jiamin' , 'age' : '28' , 'weight' : '81' }
dict_two = { k: v for k, v in dict_one. items( ) if k == 'name' }
python中迭代器
迭代器是Python中一个数据量对象的容器,当使用时候每次都从其中取出一个,直到取完
自定义迭代器
只要定义一个实现迭代器协议的方法类即可,主要协议方法与入学两个
__iter__( )
__next__( )
class MyIterator :
def __init__ ( self, x= 2 , xmax= 100 ) :
self. __mul, self. __x = x, x
self. __xmax = xmax
def __iter__ ( self) :
return self
def __next__ ( self) :
if self. __x and self. __x != 1 :
self. __mul *= self. __x
if self. __mul <= self. __xmax:
return self. __mul
else :
raise StopIteration
else :
raise StopIteration
if __name__ == '__main__' :
myiter = MyIterator( )
for i in myiter:
print ( '自定义迭代器: ' , i)
内置迭代器工具
Python中内建了一个用于产生迭代器的函数iter(),另外一个标准库的itertools模块还有丰富的迭代器工具: 内置迭代器工具实例:
class Counter :
def __init__ ( self, x= 0 ) :
self. x = x
counter = Counter( )
def used_iter ( ) :
counter. x += 2
return counter. x
for i in iter ( used_iter, 8 ) :
print ( "内建迭代器遍历: " , i)
itertools模块中常用工具函数
import itertools
def countTest ( ) :
for i in itertools. count( 1 , 3 ) :
print ( i)
if i >= 10 :
break
def cycleTest ( ) :
for i in itertools. cycle( [ 1 , 2 , 3 ] ) :
print ( i)
def repeatTest ( ) :
print ( list ( itertools. repeat( 2 , 3 ) ) )
def chainTest ( ) :
print ( list ( itertools. chain( [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ) ) )
def compressTest ( ) :
print ( list ( itertools. compress( [ 1 , 2 , 3 , 4 ] , [ 1 , None , True , False ] ) ) )
def dropwhileTest ( ) :
print ( list ( itertools. dropwhile( lambda x: x > 6 , [ 8 , 9 , 1 , 2 , 10 , 11 ] ) ) )
def filterfalseTest ( ) :
print ( list ( itertools. filterfalse( lambda x: x > 6 , [ 8 , 9 , 1 , 2 , 10 , 11 ] ) ) )
def takewhileTest ( ) :
print ( list ( itertools. takewhile( lambda x: x > 6 , [ 8 , 9 , 1 , 2 , 10 , 11 ] ) ) )
def teeTest ( ) :
for its in itertools. tee( [ 0 , 1 ] , 2 ) :
for it in its:
print ( it)
def zip_longestTest ( ) :
for i in itertools. zip_longest( [ 1 , 2 , 3 , 8 ] , [ 3 , 4 , 5 , 76 ] , ( 0 , 2 , 3 , 4 ) ) :
print ( i)
def productTest ( ) :
for i in itertools. product( [ 1 , 2 , 3 , 8 ] , [ 3 , 4 , 5 , 76 ] ) :
print ( i)
def permutationsTest ( ) :
print ( list ( itertools. permutations( [ 1 , 2 , 3 , 4 ] , 4 ) ) )
print ( list ( itertools. permutations( 'ASBD' , 4 ) ) )
def combinationsTest ( ) :
print ( list ( itertools. combinations( 'abc' , 2 ) ) )
print ( list ( itertools. combinations( [ 1 , 2 , 3 ] , 2 ) ) )
if __name__ == '__main__' :
combinationsTest( )