Python学习笔记 - 高级特性

Python学习笔记 - 高级特性

根据廖雪峰的Python教程做成的笔记,其中不包含全部知识点,仅是重点或是容易发生混淆或者忘记的部分。

1.切片(Slice)

基本形态

L = [0,1,2,3,4,5,6,7,8,9]
S = L[m:n]

示例

  • 一般方法
# 定义list或tuple
L = ['Michael', 'Tom', 'Tracy', 'Bob', 'Jack']
L = ('Michael', 'Tom', 'Tracy', 'Bob', 'Jack')

# 取得前三个元素('Michael', 'Tom', 'Tracy')
L1 = L[0:3]

# 取得第2到第4个元素('Tom', 'Tracy', 'Bob')
L2 = L[1:4]

# 取得倒数第二个到最后的元素('Bob', 'Jack')
L3 = L[-2:]
  • 高阶方法
# 生成包含数字0 ~ 99的一个list或tuple
L = list(range(100))
L = tuple(range(100))

# 前10个数,每2个取一个
L1 = L[:10:2]

# 所有数,每5个取一个
L2 = L[::5]

# 复制一个list
L3 = L[:]
  • 字符串操作
    字符串也可以当做一个list,每个元素就是一个字符,可以进行切片操作。
s = 'ABCDEFG'
s1 = s[::2]     # s1 = 'ACEG'

2.迭代

迭代dict

  • 只迭代key
d = {'a': 1, 'b': 2, 'c': 3}
for key in d:
    print(key)
  • 只迭代value
d = {'a': 1, 'b': 2, 'c': 3}
for value in d.values():
    print(value)
  • 同时迭代key和value
d = {'a': 1, 'b': 2, 'c': 3}
for k,v in d.items():
    print(k,v)

迭代字符串

s = 'ABCD'
for ch in s:
    print(ch)

可以用下面的方法判断对象是否可迭代:

from collections import Iterable

# 可迭代返回True,不可迭代返回False
isable = isinstance('abc', Iterable)

可以使用Python内置的enumerate函数把一个list变成索引-元素对,这样就可以再for循环中同时迭代索引和元素本身。

- 利用前:
sum = 0
L = list(range(100))
for v in L:
    print(v)

- 利用后:
sum = 0
L = list(range(100))
for i, v in L:
    print(i, v)

3.列表生成式

示例

例1:生成一个list [1x1, 2x2, 3x3, …, 10x10]

L = [x * x for x in range(1, 11)]

例2:生成一个list,元素为1~10数字中偶数的平方

L = [x * x for x in range(1, 11) if x % 2 == 0]

例3:使用双层for循环

L = [m + n for m in 'ABC' for n in 'XYZ']
# ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

4.生成器(generator)

一边循环一边计算的机制,成为生成器。适用于list中元素很多(意味着占用内存空间非常大),且元素可以通过某种算法推算出来的场景,通过生成器,不用创建完整的list,节省了大量的空间。

创建生成器

  • 方法一:
    语法结构与列表生成式相同,仅把[]变成()
g = (x * x for x in range(10))
  • 方法二:
    复杂推算算法的场合用方法一可能无法生成,则可使用函数生成。存在关键字yield的函数就变成了generator函数,函数执行顺序比较诡异,遇到yield语句就返回,再次执行时从上次返回的yield语句出继续执行。
例:生成斐波那契数列。
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'

5.迭代器

  • 凡是可作用于for循环的对象都是Iterable类型。
  • 凡是可作用于next()函数的对象都是Iterator类型,他们表示一个惰性的计算序列。
  • 集合数据listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值