python跟我学从零开始学习笔记系列(二)

本文深入探讨Python的高级特性,包括切片、迭代、列表生成式、生成器和迭代器的详细解析及应用实例,适合有一定Python基础的学习者进阶。

上一节整理了python的基本数据类型,以及对一些类型的操作,本节梳理一下python的一些高级特性

1、切片
顾名思义,切片就是获取list或tuple的部分元素

# -*- coding:utf-8 -*-
#切片
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
print(L[0:2]) #获取集合中从索引0到2的元素,不包括2,如果从0开始可以这么写 L[:2]
lr = list(range(100))
print(lr[:10]) #获取前10个数
print(lr[-10:]) #获取后10个数
print(lr[1:10:2]) #1到10个数,没隔两个取一个
print(lr[::3]) #所有数每隔3个取一个
#tuple和list一样,区别是tuple不可变,所以tuple也可以切片操作,只是切片之后还是tuple
string = 'ABCDEFG'
print(string[0:2]) #字符串也可以用切片操作,截取之后仍然是字符串

2、迭代
给定一个list或tuple,可以通过for循环来访问他们中的元素,叫做迭代。Java和c、c++中都有类似的概念

# -*- coding: utf-8 -*-
from collections import Iterable
#list、tuple、dict、字符串等都可以迭代遍历
d = {'name':'wangbin', 'age':'30', 'sex':'man'}
for item in d: #遍历key
    print(item)

for value in d.values(): #遍历vlaue
    print(value)

for key, value in d.items(): #遍历key,value
    print(key, value)

#只要是可迭代对象,都可以用for循环迭代,可通过collections模块中的Iterable类型来判断是否是可迭代对象
print(isinstance('abc', Iterable))
print(isinstance([1,2,3], Iterable))
print(isinstance(123, Iterable))

for i, value in enumerate(['A', 'B', 'C']): #enumerate函数可以把list变成索引-元素对
    print(i, value)

3、列表生成式
列表生成式就是通过一定的规则生成list,这是python中既简单又强大的生成list的方式

# -*- coding: utf-8 -*-
#列表生成式,可以生成复杂list
n = [x*x for x in list(range(1,10))]
print(n)

m = [x*x for x in list(range(1,20)) if x%2 == 0]
print(m)

#两层for循环-生成全排列list
p = [m+n for m in ['Z', 'X', 'Y'] for n in ['A', 'S', 'D']]
print(p)

d = {'a':'1', 'b':'2', 'c':'3', 'd':'4'}
q = [key+'='+value for key, value in d.items()]
print(q)

#把list中的所有字符串变成小写
L = ['Hello', 'World', 'IBM', 'Apple']
q = [s.lower() for s in L]
print(q)

#表达式中有if语句
L = ['Hello', 'World', 18, 'Apple']
q = [s if isinstance(s, int) else s.lower() for s in L]
print(q)

4、生成器
生成器即通过算法来生成list,这样的好处是可以生成一些复杂的list,还有就是节省内存,因为如果有一个上万条记录的list,但是只用到其中的几条记录,这种情况,就可以用生成器

# -*- coding: utf-8 -*-
#生成器可以理解成是生成list的算法,不必将整个list都生成放到内存里,这样太浪费空间,而是创建一个生成器,当需要此list的时候就调用该生成器即可
# <方法一> 类似列表生成式,只是把[]换成()
g = (x for x in list(range(10)))
print(next(g)) #可以用next函数来遍历
print(next(g))
print("-------------------------------")
for v in g: #上面已经有了next函数,所以此处的for循环是循环的next之后的值
    print(v)
#斐波那契斐波那契数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
print("-------------斐波那契数列-------------------")
def fib(max):
    n ,a, b = 0, 0, 1
    while n < max:
        a, b = b, a+b
        n = n + 1
        print(a)
    return 'done'

fib(10)

#创建生成器<方法二> 函数定义中包含yield关键字 那么这个函数就是一个generator
print("--------------创建生成器方法二------------------")
def fibgenerator(max):
    n ,a, b = 0, 0, 1
    while(n < max):
        a, b = b, a+b
        n = n + 1
        yield(a) 
    return "done"

fib(10)

5、迭代器

# -*- coding: utf-8 -*-
from collections.abc import Iterator
#迭代器Iterator,凡是可以通过调用next函数来获取下一个值的对象都是迭代器对象
#可以使用isinstance()来判断对象是否是迭代器对象
print(isinstance('abc', Iterator))
print(isinstance({}, Iterator))
print(isinstance((x for x in range(10)), Iterator))
#通过iter()函数可以可以将可迭代对象(Iterable,如list, dict, str等)变成迭代器对象
print(isinstance(iter('abc'), Iterator))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值