python迭代和切片


from collections import Iterable

#切片************************
#
#取一个list或tuple的部分元素是非常常见的操作 ,Python提供了切片(Slice)操作符,能大大简化这种操作

li = [1,22,4,5,3,21]

l = li[0:2] #取前两个元素 从0个开始,到第二个结束,不包含第二个 
print(l) # [1,22]

# Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:

l = li[-2:]  # [3,21]
m = li[-2:-1]  # [3]

# 记住倒数第一个元素的索引是-1
# 
# 切片操作十分有用。我们先创建一个0-99的数列:

lis = list(range(100)) # [0,....99]

l = lis[:10] #前10个

m = lis[-10:] #后10个

n = lis[10:20] #第11个到第20个

o = lis[:10:2] #前10个 ,每两个取一个 [0,2,4,6,8]

v = lis[::5] #所有数字,每五个取一个 

# print( v )  # [0,5,10,15,20,....95]

# 甚至什么都不写,只写[:]就可以原样复制一个list:

copyLis = lis[:]

# tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
t = (1,2,3,4)
# print( t[1:3]);  # ( 2 , 3 )

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

# print('asdfghj'[:3]) # 'asd'
# print('asdfghj'[::3]) #'afj'

# 迭代#####################
#在Python中,迭代是通过for ... in来完成的

# for ... in 迭代 list或tuple

l = ['小明','小李','小王','小张']

for x in l:
	print( x )

# for ... in 迭代 dict

d = {'name':'xiaoWang','gender':'女','age':'18'}

for x in d:
	print( x ) # 'name' 、'gender'、'age'

#默认情况下,for ... in 迭代 dict 时,dict迭代的是key,如果想迭代value值,可以用for value in d.values():

for value in d.values():
	print(value)  # ‘18、'女'、'xiaoWang'

# !!!注意, 因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。	

# 如果想同时迭代key和value,可以用 for k,v in d.items()
for k , v in d.items():
	print(k,':',v)  # 'name':'xiaoWang','gender':'女','age':'18'


# 字符串也是可迭代对象,也可以用 for ... in 循环:

str = '我是小明,我爱滚出去'

for s in str:
	print( s ) # 我、是、小、明、,、我、爱、滚、出、去

# 所以,当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。

# 那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

bl = isinstance( 'str' , Iterable )
bl2 = isinstance( [1,2,3] , Iterable )
bl3 = isinstance( 122 , Iterable )
print( bl ) #True
print( bl2 ) #True
print( bl3 ) #False

# 如果要对list实现类似Java那样的下标循环怎么办?
# Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

for i,value in enumerate(['a','b','c','d']):

	print( i , value ) # 0 , 'a'; 1,'b'; 2,'c'; 3,'d'

# 上面的for循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:

ls = [{'a':1,'b':2},{'a':3,'b':4},{'a':5,'b':6}]

for i, o in enumerate( ls ):
	print( o['a'] )  # 1 、3、5

for x , y in [('a' , 'b'),('c','d')]:

	print( x , y ) # a b 、 c d 

posted @ 2017-09-15 16:31  若水若鱼  阅读(181)  评论(0编辑  收藏  举报