关闭

python学习笔记二:切片、迭代、迭代器与相关函数

301人阅读 评论(0) 收藏 举报
分类:


Python中的切片、迭代、迭代器与相关函数


1、切片


使用切片常常可以以一行代码替代普通的循环。


Python中可以对序列切片,序列是指:元组、列表、字符串,这里以列表为例。


>>> L=list(range(100))


>>> L[0:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


>>> L[:5]
[0, 1, 2, 3, 4]


>>> L[95:]
[95, 96, 97, 98, 99]


>>> L[-10]
90


>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]


>>> L[-10:-1]
[90, 91, 92, 93, 94, 95, 96, 97, 98]


>>> L[:10:2]
[0, 2, 4, 6, 8]


注意,表示切片的[]可以接在任何序列后面(例如变量、常量或函数)。


2、迭代


使用迭代而不是普通循环可以提高性能。


判断对象是否可迭代:


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


迭代的例子:


>>> for x,y in [(1,1),(2,4),(3,9)]:
...     print(x,y)
... 
(1, 1)
(2, 4)
(3, 9)


3、列表生成式


使用列表生成式可以以更少的代码生成所需的列表。


生成1到10这些数字中偶数的平方的列表:


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


4、迭代器


判断是否是迭代器(与可迭代的概念不同):


>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)


凡是可作用于for循环的对象都是Iterable类型;


凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;


集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。


5、map与reduce


map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。


>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']


reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,返回计算结果。


>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25


6、filter


>>> def is_odd(n):
...     return n%2 ==1
... 
>>> list(filter(is_odd,[1,2,4,5,6,9,10,15]))
[1, 5, 9, 15]




7、sorted


sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]


sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
key指定的函数将作用于list的每一个元素上


>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
['Zoo', 'Credit', 'bob', 'about']
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:55682次
    • 积分:1307
    • 等级:
    • 排名:千里之外
    • 原创:74篇
    • 转载:19篇
    • 译文:2篇
    • 评论:2条
    最新评论