Python学习笔记(三)

Python学习笔记(三)

高级特性

1.切片

顾名思义,就是对集合进行切取,类似java中的subString()方法的功能。在Python中能进行切片操作的有List,tuple,字符串。在其他语言中需要写循环语句来遍历达到截取的目的,在Python中很简单。

L = list(range(100))  
print(L[0:10])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  

L[0:10]表示从从索引0开始取,直到索引10为止,但不包括索引10
如果第一个索引是0,还可以省略:

L = list(range(100))  
print(L[:10])
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  

它同样支持倒数切片,例如:

L = list(range(100))
print(L[-5:])
[95, 96, 97, 98, 99]  

L[-5:]表示重倒数第5个开始打印,一直到L末尾元素。

前10个数,每两个取一个:

L = list(range(100))     
print(L[:10:2])  
[0, 2, 4, 6, 8]  

L[:10:2]表示没隔两个取一个。
复制一个list可以用[:]来处理。
tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

t = (1,2,3)     
print(t[0:3])  
(1, 2, 3)  

字符串’xxx’也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

str = 'ABCDEFG'   
print(str[0:3])  
ABC

2.迭代

在Python中只要是可迭代对象,无论有无下标,都可以迭代,判断一个对象是否是可迭代对象

from collections import Iterable
print(isinstance('abc',Iterable))  
True

在java中迭代通过for循环来完成,但是在Python中通过for...in来完成:
迭代list:

L= [1,2,3]
for i in L:
    print(i)  
1
2
3  

迭代dict:

d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
    print(key)  
a
c
b  

默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values()

d = {'a': 1, 'b': 2, 'c': 3}
for value in d.values():
    print(value)  
2
3
1  

迭代字符串:

for ch in 'ABC':
    print(ch)  
A
B
C    

如果我们想得到索引index和对应的value,可以通过Python内置函数enumerate来把一个list变成索引-元素对,这样就可以用for来获同事迭代索引和元素本身。

L = ['A','B','C']
for ch in enumerate(L):
    print(ch)  
(0, 'A')
(1, 'B')
(2, 'C')  

打印结果是一个一个的tuple,说明是enumerate将list变成一个装有tuple的list。

L = ['A','B','C']
for index,value in enumerate(L):
    print(index,value)
0 A
1 B
2 C  

for循环中还可以引入两个变量。
zip()函数可以把两个 list 变成一个 list:

L1= [1,2,3,4]
L2 = ['android','java','kotlin','Rxjava']
for x in zip(L1,L2):
    print(x)  
(1, 'android')
(2, 'java')
(3, 'kotlin')
(4, 'Rxjava')  

3.列表生成器

列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
创建一个[1*1,2*2,3*3...,10*10]的集合:

L = [x * x for x in range(1,11)]  
print(L)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  

for 循环后面还可以添加判断条件:

L2 = [x * x for x in range(1,11) if x %2 == 0]
print(L2)  
[4, 16, 36, 64, 100]  

还可以使用两层循环,可以生成全排列:

L3 = [m + n for m in 'ABC' for n in 'XYZ']
print(L3)  
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']  

列表生成式也可以使用两个变量来生成list:

d = {'x': 'A', 'y': 'B', 'z': 'C' }
print([k+':'+v for k,v in d.items()])  
['y:B', 'z:C', 'x:A']

items()函数的作用是将dict里面的key-value转变成tuple装进一个list里面

d = {'x': 'A', 'y': 'B' , 'z': 'C' }  
print(d.items())  
dict_items([('z', 'C'), ('y', 'B'), ('x', 'A')])  

把一个list中所有的字符串变成小写:

L = ['Hello', 'World', 'IBM', 'Apple']
print([s.lower() for s in L])  
print([s.upper() for s in L])
['hello', 'world', 'ibm', 'apple']  
['HELLO', 'WORLD', 'IBM', 'APPLE']

lower()函数的作用是将字符串变成小写,upper()函数的作用是将字符串变成大写。

3.生成器

在Python中,这种一边循环一边计算的机制,称为生成器:generator。

L = [s * s for s in range(1,11)]
print(L)
G = (s * s for s in range(1,11))
print(G)  
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
<generator object <genexpr> at 0x002C05A0>  

创建LG的最大的区别就是[]()的区别,L是一个list,G是一个generator。
获取generator里面的每一个元素,可以利用next()函数,类似于指针作用,指向哪个元素就可以打印出哪个元素。也可以通过for循环来打印:

G = (s * s for s in range(1,11))
for s in G:
    print(s)  
1
4
9
16
25
36
49
64
81
100  

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator.

参考资料:廖雪峰的官方网址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值