python学习21之高级特性

''''''
'''
1.切片
(1)谁可以进行切片操作?——列表,元组,字符串
(2)切片有以下几种操作
'''
#[a:b]:取从下标为a的元素开始,到下标为b-1的元素结束
L=['aa','bb','cc','dd','ee','ff','gg']
l1=L[0:3]#取出来的是:下标为0,1,2的元素
print(l1)
#['aa', 'bb', 'cc']

#[:c]:表示从下标0开始取,取到c-1;[d:]:表示从d开始取,取到最后;如果d为负数,表示倒数第d个元素
l2=L[:3]
print(l2)
#['aa', 'bb', 'cc']
l3=L[-2:]
print(l3)
#['ff', 'gg']
l4=L[1:]
print(l4)
#['bb', 'cc', 'dd', 'ee', 'ff', 'gg']

#[a:b:c]:从a开始取,取到b-1,每隔c-1个数取一次,称为步长值为c
l5=L[0::2]
print(l5)
#['aa', 'cc', 'ee', 'gg']
'''
2.迭代
(1)谁可以进行迭代操作?——可以迭代的对象都可以进行迭代操作:列表,元组,字符串,字典,集合等
(2)迭代有以下几种操作
'''
#常规操作:for in 循环或者while循环
for n in L:
print(n)

i=0
while i < len(L):
print(L[i])
i+=1

#列表的迭代:用for in D循环打印出来的是字典的键
D={1:'xiaowang',2:'xiaoli',3:'xiaozhang',4:'xiaoliu'}
for k in D:
print(k)
'''
1
2
3
4
'''
#如果想打印出字典的值,用D.values()函数
for v in D.values():
print(v)
'''
xiaowang
xiaoli
xiaozhang
xiaoliu
'''
#如果想成对打印,则用D.items()
for d in D.items():
print(d)
print(type(d))
'''
(1, 'xiaowang')
(2, 'xiaoli')
(3, 'xiaozhang')
(4, 'xiaoliu')
<class 'tuple'>
'''
#还可以这样
for k,v in D.items():
print(k,v)
'''
1 xiaowang
2 xiaoli
3 xiaozhang
4 xiaoliu
'''
#在python中,for循环里出现两个变量十分常见
for a,b in [(1,1),(2,2),(3,3)]:
print(a,b)
'''
1 1
2 2
3 3
'''
'''
3.列表生成式
通过在列表里写一行表达式及表达式中变量需要满足的条件,来完成生成列表的操作,取代循环,简化代码
'''
l6=[x * x for x in range(1, 11)]
print(l6)
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
'''
写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来,十分有用。
for循环后面还可以加上if判断,这样我们就可以筛选出仅偶数的平方:
'''
l7=[x * x for x in range(1, 11) if x % 2 == 0]
print(l7)

#还可以使用两层循环,可以生成全排列:
l8=[m + n for m in 'ABC' for n in 'XYZ']
print(l8)
# ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

#把一个list中所有的字符串变成小写:
L = ['Hello', 'World', 'IBM', 'Apple']
[s.lower() for s in L]
'''
如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错。
使用内建的isinstance函数可以判断一个变量是不是字符串。请修改列表生成式,通过添加if语句保证列表生成式能正确地执行:
'''
L1 = ['Hello', 'World', 18, 'Apple', None]
L2=[s.lower() for s in L1 if isinstance(s,str) ]