美文网首页
python 高级特性

python 高级特性

作者: 倔强的潇洒小姐 | 来源:发表于2019-01-04 22:41 被阅读13次

1行代码能实现的功能,决不写5行代码,代码越少,效率越高

一、切片(含头不含尾)

作用:可以实现很多行循环才能完成的操作

L = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

# 取前三
print(L[0:3])  # [1, 2, 3]
print(L[:3])   # [1, 2, 3]
# 第2个开始,不含第5个
print(L[2:5])  # [3, 4, 5]
# 倒数第4个到最后
print(L[-4:])  # [7, 8, 9, 0]
# 前7位数,每隔2位取一个
print(L[:7:2])  # [1, 3, 5, 7]
# 复制
print(L[:])

练习题:实现一个trim()函数,去除字符串首尾的空格

def trimbegin(s):
    for i in range(length):
        if s[i] == ' ':
            i += 1
        else:
            return s[i:]


def trimend(s):
    length = len(trimbegin(s))   # 去除前空格后需要重新计算length
    for j in range(length):
        if s[length-1-j] == ' ':
            j += 1
        else:
            return s[:length-j]


def trim(s):
    s2 = trimbegin(s)
    s3 = trimend(s2)
    return s3


if __name__ == '__main__':
    s = input('请输入字符串:')
    s1 = trim(s)
    print('去除字符串首尾空格后为:', s1)

补充:

  • strip()函数 :仅去除前后空格
  • re.sub()函数: 前中后空格都会去除, 格式:re.sub(‘ ’, '', str)
经验总结

(1)牢牢记住公式[i : i+n : m],当出现缺省值时,通过想象把公式补全;
(2)索引为负且步长为正时,按倒数计算索引位置;索引为负且步长为负时,先翻转列表,再按倒数计算索引位置。

二、迭代(遍历)

只要是可迭代对象,无论有无下标,都可以迭代

d = {'a': 1, 'b': 2, 'c': 3}

for key in d:   # 迭代key
    print(key)

for value in d.values():   # 迭代value值
    print(value)

for key, value in d.items():  # 迭代key和value
    print(key, value)

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

print(isinstance('abc', Iterable))  # 字符串 True
print(isinstance(2132, Iterable))   # 整数 False
print(isinstance((1, 2, 3), Iterable))  # 元组 True
print(isinstance({'1': 1, '2': 2, '3': 3}, Iterable))  # 字典 True
print(isinstance([1, 2, 3], Iterable))  # 列表 True
print(isinstance(([1, 2, 43, 2, 1]), Iterable))   # 集合 True
enumerate :可以把一个list变成索引-元素对

enumerate adds an index or position value to each item in the list starting at 0.

利用它可以同时获得索引和值

list_test = ["办", "公", "室", "好", "热", "啊"]
for index, item in enumerate(list_test, 3):
    print(index, item)
image.png

enumerate() takes at most 2 arguments,可以指定索引值,默认为0

image.png

练习题:使用迭代查找一个list中最小和最大值,并返回一个tuple

def findMinAndMax(L):
    max1 = min1 = L[0]
    for x in L:
        if max1 < x:
            max1 = x
    for y in L:
        if min1 > y:
            min1 = y
    return min1, max1


if __name__ == '__main__':
    L = [11, 2, 35, 4, 5, 6, 7, 28, 19]
    a = findMinAndMax(L)
    print(a)

三、列表生成式

Python内置的非常简单却强大的可以用来创建list的生成式(可以快速生成list,也可以通过一个list推导出另一个list)

练习:求10以内偶数的平方

a = [x * x for x in range(10) if x % 2 == 0]     # [0, 4, 16, 36, 64]

如果list中既包含字符串,又包含整数,通过添加if语句保证列表生成式能正确地执行

L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [s.lower() for s in L1 if isinstance(s, str)]
print(L2)
if L2 == ['hello', 'world', 'apple']:
    print('测试通过')
else:
    print('测试失败')   

四、生成器:一边循环一边计算

工作原理可以理解为在 for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。
对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束

1、把一个列表生成式的 [] 改成 (),就创建了一个generator
输出generator的每一个元素,用next()函数,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误

L = (x * x for x in range(10))
print(L)    # <generator object <genexpr> at 0x000001CD581CC7D8>
print(next(L))   # 0
print(next(L))   # 1
print(next(L))   # 4
print(next(L))   # 9
....
print(next(L))   # StopIteration

2、函数中使用yield

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n += 1
    return 'done'


if __name__ == '__main__':
    x = fib(10)
    print(x)      # <generator object fib at 0x0000019618EA01A8>

五、迭代器

1、可以表示一个无限大的数据流
2、可以被 next() 调用并不断返回下一个值的对象

判断方法:使用 isinstance(),使用 iter() 将Iterable变成Iterator

from collections import Iterator

print(isinstance((x for x in range(10)), Iterator))   # True
print(isinstance([], Iterator))   # list,False
print(isinstance({}, Iterator))   # dict,False
print(isinstance('abc', Iterator))   # str,False
print(isinstance(iter([]), Iterator))   # True
print(isinstance(iter({}), Iterator))   # True
print(isinstance(iter('abc'), Iterator))   # True   

相关文章

  • Python学习(三)

    Python的高级特性 python中有很多高级特性,比起C/C++来说要简单许多,运用起来十分方便。 切片 通常...

  • Python高级特性

    切片slice取指定索引范围的操作:[0:10:2]-->意为从第一个元素到第11个元素,元素之间隔2 迭代ite...

  • python 高级特性

    1.切片对取数据很方便,如取一个list的前n个元素,没有接触到切片的,可以使用循环,但是用切片就会很简单: 也支...

  • Python高级特性

    切片 迭代 列表生成式 生成器 generator generator:按照某种算法推算出来结果,是一种一边循环一...

  • Python——高级特性

    #!/usr/bin/python # -*- coding:UTF-8 -*- __author__ = 'wx...

  • python高级特性

    python高级特性 iteration迭代 对list,tuple的遍历被称为迭代。对list实现类似Java那...

  • python高级特性

    一、列表生成器 1. 形式: [表达式 for ... in 可迭代类型 [if expression] ] 2....

  • Python 高级特性

    切片 迭代 列表生成式 生成器 迭代器

  • Python高级特性

    掌握了Python的数据类型、语句和函数,基本上就可以编写出很多有用的程序了。 比如构造一个1, 3, 5, 7,...

  • python高级特性

    1、切片(slice)L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3...

网友评论

      本文标题:python 高级特性

      本文链接:https://www.haomeiwen.com/subject/hmwikqtx.html