1、切片[list,tuple]
L[m:n]表示,从索引m开始取,直到索引n-1;即索引m,m+1,……,n-1。
L[m:n:p]表示:从索引m开始到索引n取数据,每p个取一个,但是不包含索引n。
1、m、n、p、可以为负数:
1、p>0 从首部往尾部方向取,p<0是从尾部向首部取。
2、m、n大于0表示索引值。
3、m、n小于0表示倒数第几个。
L[-5:-2] 表示倒数第5到倒数第2元素(不包含倒数第2个元素)从首到尾的顺序取。
L[-2:-5:-2] 表示倒数第2到倒数第5元素(不包含倒数第5个元素)从尾到首的顺序取,每2个取一个。
2、可以缺省: 甚至什么都不写,L[::]。m缺省为p表示的方向的首元素,n缺省为p表示的方向的尾元素的后一个,p缺省表示1
代码实例:
l=['A','B','C','B','E']
print(l[1])
#p为整数
#L[m:n]表示,从索引m开始取,直到索引n 但是不包含n。
print(l[1:5])
#L[m:n:p]表示:从索引m开始到索引n取数据,每p个取一个,但是不包含索引n。
print(l[1:5:2])
#m 缺省 从头开始取 n不写取到尾部 p默认是1
print(l[::2])
print(l[1::2])
#####m n p 负数 m n 为负数表示倒数第几个 p表示方向 p>0 正方向 反正负方向
#ECA
print(l[-1::2])
print(l[-1::-2])
print(l[4:1:-2])
print(l[1:4:-1])
print(l[1:4:1])
2、迭代[list,tuple,dict,set]
list和tuple迭代的是里面的元素;for i in l;
dict迭代key: for key in d ;或者 for i in d.keys();
dict迭代value:可以用for v in d.values();
dict迭代key和value,可以用for k, v in d.items();
set 迭代里面的元素 for i in s
索引下标遍历:
如果要对这些集合实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:
list或者tuple遍历索引和元素:for i, value in enumerate(['A', 'B','C']):
set遍历索引和元素:for i,value in enumerate(set(['a','b','c'])):
dict遍历 索引和key:for i,k in enumerate({'A':'a', 'B':'b', 'C':'c'}):
代码示例:
# 迭代 list
l=['a','b','c']
for i in l:
print(i)
d={"a":"A","b":"B"}
for i in d.keys():
print(i)
for k in d:
print(k)
for k,v in d.items():
print(k,v)
for i,value in enumerate(l):
print(i,value)
for i,value in enumerate(('a','b','c')):
print(i,value)
for i,value in enumerate(set(['a','b','c'])):
print(i,value)
for i,k in enumerate({'A':'a', 'B':'b', 'C':'c'}):
print(i,k)
3、列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
[x * x for x in range(1, 11)] [x * x for x in range(1, 11) if x % 2 == 0]
还可以使用两层循环,可以生成全排列:[m + n for m in 'ABC' for n in 'XYZ']
for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value:
d = {'x': 'A', 'y': 'B', 'z': 'C' } [k + '=' + v for k, v in d.items()]
代码示例:
# 列表生成式
l=[2*i for i in range(1,11)]
print(l)
l=[2*i for i in range(1,11) if i%2==0]
print(l)
l=[i*j for i in [1,2,3] for j in [1,2,3] if i%2==0 and j%2!=0]
print(l)
4、生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
只要把一个列表生成式的[]改成(),就创建了一个generator:
g = (x * x for x in range(10))
我们讲过,generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
但是我们一般通过for循环来迭代它,并且不需要关心StopIteration的错误。
for n in g:
print(n)
代码示例:
# 列表生成器
g=(2*i for i in range(1,11))
for i in g:
print(i)