您的位置:首页 > 编程语言 > Python开发

Python基础-切片和迭代

2016-11-07 20:11 169 查看

Python

切片和迭代

切片

现有
footballStar=['Messi','Henry','Iniesta']
,如何取 list 中的前 n个元素了?

我们可以使用循环,如下所示:

footballStar = ['Messi', 'Henry', 'Iniesta']
n = 2
r = []
for i in range(n):
r.append(footballStar[i])
print(r)


对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。

正序切片

对于取前面两个元素,可以直接使用以下语句完成:

>>> footballStar[0:2]
['Messi', 'Henry']
>>> footballStar[:2]# 第一个索引为0,可以省略
['Messi', 'Henry']
>>> footballStar[1:3]
['Henry', 'Iniesta']
>>> footballStar[:]#只用一个: 表示从头到尾
['Messi', 'Henry', 'Iniesta']


切片操作还可以指定第三个参数,第三个参数表示每N个取一个.

>>> footballStar[::2]
['Messi', 'Iniesta']#每两个元素取出一个来,也就是隔一个取一个。


逆序切片

>>> footballStar[-2:]
['Henry', 'Iniesta']
>>> footballStar[:-2]
['Messi']
>>> footballStar[-3:-1]
['Messi', 'Henry']


字符串切片

>>> 'abcdefg'[:3]
'abc'
>>> 'abcdefg'[-3:]
'efg'
>>> 'abcdefg'[::3]
'adg'


迭代

在Python中,迭代是通过 for … in 来完成的.相比于 c 或者 java,Python的for循环抽象程度要高于Java的for循环。因为 Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。

索引迭代

Python中,迭代永远是取出元素本身,而非元素的索引。对于有序集合,元素是有索引的,那么我们要怎么拿到这些索引了.Python 中提供了enumerate() 函数来解决这个问题.

>>> footballStar = ['Messi', 'Henry', 'Iniesta']
>>> for index,name in enumerate(footballStar):
...     print(index,'-',name)
...
0 - Messi
1 - Henry
2 - Iniesta


迭代 dict 的 value

dict对象本身就是可迭代对象,用 for 循环直接迭代 dict,可以每次拿到dict的一个key。

dict = {'Messi': 50, 'Henry': 34, 'Iniesta': 15}
for key in dict:
print(key)
#Iniesta
#Henry
#Messi


那么我们该怎样 迭代 dict 对象的value?dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value.

for value in dict.values():
print(value)
#50
#34
#15


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

如果同时迭代 key 和 value,可以使用dict.items()方法.

for key, value in dict.items():
print(key, '->', value)
#Iniesta -> 15
#Henry -> 34
#Messi ->
4000
; 50


如何判断一个对象是否是可迭代的对象?可以通过 collections 模块的 Iterable 类型判断:

>>> from collections import Iterable
>>> isinstance('jf',Iterable)#str 是否可以迭代
True
>>> isinstance([1,2,3],Iterable)#list 是否可以迭代
True
>>> isinstance(123,Iterable)#整数是否可以迭代
False
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 切片 迭代