Python高级特性

141 阅读3分钟

                                                    Python高级特性
Python版本3.6.5                                                
1、切片:可以理解为字符串、列表、元组截取
(1)、从左往右(包左不包右)
代码:
lists = ['zhangSan', 'liSi', 'wangWu','zhaoLiu']
print(lists[0:3])       #从索引0开始,到索引3;不包含3
print(lists[:3])        #如果从0开始,0可以省略
print(lists[1:3])        
打印:
['zhangSan', 'liSi', 'wangWu']
['zhangSan', 'liSi', 'wangWu']
['liSi', 'wangWu']
(2)、从右往左(最后一个元素是-1,以此类推)
代码:
lists = ['zhangSan', 'liSi', 'wangWu','zhaoLiu']
print(lists[-2:])
print(lists[-2:-1])
打印:
['wangWu', 'zhaoLiu']
['wangWu']
(3)、切片的灵活操作
代码:
lists = list(range(30))    #生成一个list 0-29 包左不包右
print(lists[:10])       #打印前10
print(lists[-10:])      #打印后10
print(lists[10:20])     #前(10+1)到(19+1)
print(lists[:10:3])     #前10个数,从第一个开始,每3个取一个
print(lists[::4])       #所有的,从第一个开始,每4个取一个
print(lists[:])         #原样复制,取所有的
打印:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 3, 6, 9]
[0, 4, 8, 12, 16, 20, 24, 28]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
(4)、元组(tuple)和字符串(str)也支持切片操作

2、迭代:如果给定一个列表(list)或者元组(tuple),我们可以用循环来遍历,这称为迭代
代码:
from collections import Iterable #collections模块的Iterable类型,用于判断是否可迭代

dicts = {'zhangSan':18, 'liSi':19, 'wangWu':20,'zhaoLiu':21}
print('------打印键------')
for key in dicts:   #打印键
print(key)

print('------打印值------')
for val in dicts.values():  #打印值
print(val)

print('------打印键值------')
for k,v in dicts.items():   #打印键值
print(k,v)

print('------判断是否可迭代------')
print(isinstance(dicts, Iterable))
print(isinstance(123, Iterable))

print('------打印list的索引------')
for k,v in enumerate(['zhangSan', 'liSi', 'wangWu','zhaoLiu']):
print(k,v)

print('------for 循环中有2个变量------')   #可以是元组,也可以是列表
for k,v in [('zhangSan',18), ('liSi',19), ['wangWu',20],['zhaoLiu',21]]:
print(k,v)
打印:
------打印键------
zhangSan
liSi
wangWu
zhaoLiu
------打印值------
18
19
20
21
------打印键值------
zhangSan 18
liSi 19
wangWu 20
zhaoLiu 21
------判断是否可迭代------
True
False
------打印list的索引------
0 zhangSan
1 liSi
2 wangWu
3 zhaoLiu
------for 循环中有2个变量------
zhangSan 18
liSi 19
wangWu 20
zhaoLiu 21

3、列表生成式: 语法  [ x * x for  x in list/str/tuple ]
(1)、range(1,101,2)    从1开始,每次加2,到101-1结束。包左不包右,取1-100之间的奇数
(2)、语法: 把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来
1)、例:生成10以内的每个数的平方
代码:    
ret = [x * x for x in range(1,11)]
print(ret)
打印:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2)、生成3层
代码:
ret = [ x+y+z for x in 'abc' for y in 'ABC' for z in '123' ]
print(ret)
打印:
['aA1', 'aA2', 'aA3', 'aB1', 'aB2', 'aB3', 'aC1', 'aC2', 'aC3', 'bA1', 'bA2', 'bA3', 'bB1', 'bB2', 'bB3', 'bC1',
'bC2', 'bC3', 'cA1', 'cA2', 'cA3', 'cB1', 'cB2', 'cB3', 'cC1', 'cC2', 'cC3']
3)、打印 1-10的2种方法
代码:
ret1 = [ x for x in range(1,11) ]
ret2 = list(range(1,11))
print("ret1:",ret1)
print("ret2:",ret2)
打印:
ret1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ret2: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

4、生成器:要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator。
(1)、生成一个generator
代码:
g = ( x * x for x in range(1,11) )
print(g)
打印:
<generator object <genexpr> at 0x02FBF210>
(2)、循环generator
1)、可以用 print( next(g) ) 一次打印出值
2)、list,tuple的for循环对generator同样适用
for x in g:
print(x)