Python学习笔记(二)高级特性

1. 切片

  • 作用:取一个 list 或 tuple 的部分元素
# eg:取 list 和 tuple 的部分元素(取前 3 个元素)

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
# 方法一:
r = []
for i in range(3):
    r.append(L[i])
print(r)
# 方法二:切片(Slice)操作符:L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。
print(L[0:3])
print(L[-2:])    # ['Bob', 'Jack']
print(L[-2:-1])  # ['Bob']
# 所有数,每5个取一个:L[::5]
# 前10个数,每两个取一个:L[:10:2]
  • tuple 其实也是一种 list ,不同的是 tuple 是不可变的,所以 tuple 切片后仍是一个 tuple
>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)
>>> 'ABCDEFG'[:3]
'ABC'
>>> 'ABCDEFG'[::2]
'ACEG'
  • 举例:利用切片操作,实现一个trim()函数,去除字符串首尾的空格

def trim(s):
    while s[:1] == ' ':
        s = s[1:]
    while s[-1:] == ' ':
        s = s[:-1]
    return s

2. 迭代

  • 作用:用来遍历 list或tuple(如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代),类似 java 中的增强 for 循环
        Collection <String> c=new ArrayList <String>();
        c.add("zfliu");
        c.add("HelloWorld");
        for(String x : c) {
            System.out.println(x);
        }
  • python 中的迭代可以用到任何可迭代对象上,无论该对象是否有下标
# 1、对 dict 进行迭代
d1 = {'Tom': 10, 'Bob': 12, 'Kiwi': 2}
# 对 key 进行迭代
for key in d1:
    print(key)
# Tom
# Bob
# Kiwi

# 对 key 和 val 进行迭代
for key, val in d1.items():
    print(key, '-->', val)
# Tom --> 10
# Bob --> 12
# Kiwi --> 2

# 2、对 str 进行迭代
for ch in 'ABC':
    print(ch)
# A
# B
# C

# 3、同时引用两个变量
for x, y in [(1, 2), (4, 5)]:
    print(x, y)
# 1 2
# 4 5

# 4、对 list 实现下标和元素循环
for x, y in enumerate(['A', 'B', 'C']):
    print(x, y)
# 0 A
# 1 B
# 2 C
  • python 通过 isinstance(数据,Iterable) 来判断该对象是否为迭代对象
  • 请使用迭代查找一个list中最小和最大值,并返回一个tuple:
def findMinAndMax(L):
    def findMinAndMax(L):
        if len(L) == 0:  # 当list为空时返回空值
            return (None, None)
        max = min = L[0]  # 初始化最大值,最小值为list第一个数
        for n in L:
            if n > max:
                max = n
            if n < min:
                min = n
        return (min, max)

3. 列表生成式

  • 作用:Python内置的非常简单却强大的可以用来创建list的生成式
  • 举例
# 1、生成 [1x1, 2x2, 3x3, ..., 10x10]
# 生成[1x1, 2x2, 3x3, ..., 10x10]
# 方法一
L = []
for x in range(1, 11):
    L.append(x * x)
print(L)
# 方法二:掌握
print([x * x for x in range(1, 11)])  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 2、for 后面加 if
# 输出 [1x1, 2x2, 3x3, ..., 10x10] 的全部偶数
print([x * x for x in range(1, 11) if x % 2 == 0])  # [4, 16, 36, 64, 100]
# 两层循环实现全排列
print([m + n for m in 'ABC' for n in 'XYZ'])
# ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

# 3、if ... else(加在 for 前面)
print([x if x % 2 == 0 else -x for x in range(1, 11)])
# [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
  • 使用列表生成式将 L1 中的字符串变成小写,非字符串删除
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [x.lower() for x in L1 if isinstance(x, str)]
print(L2)
# ['hello', 'world', 'apple']

4. 生成器

参照文档:https://www.cnblogs.com/liangmingshen/p/9706181.html

5. 迭代器

参照文档:https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640

参考文档:https://www.liaoxuefeng.com/wiki/1016959663602400/1017269809315232

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值