一个程序员自学中

python高级特性应用

2018-05-29  本文已影响0人  小船翻不翻

切片

在索引查询中使用 : 查询就是切片的标志性用法

#声明一个list
>>> L = list(range(100))
>>> L
[0, 1, 2, 3, ..., 99]
#0代表索引开始的位置,3代表索引结束的位置
#缺省状态下, **:** 前面是0,后面是list最后一个索引
#如L[:3](作用相同),L[1:](跳过第一个)
>>> L[0:3]
[0, 1, 2]
#读取后10位
>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
#前10个,每两个读取一个
>>> L[:10:2]
[0, 2, 4, 6, 8]

迭代

通过for...in来完成的就是迭代

#测试对象是否允许迭代
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
#类型转换使用迭代
>>> for i, value in enumerate(['A', 'B']):
...     print(i, value)
...
0 A
1 B

列表生成式

将输出与for写在一行的形式,生成结果不改变原有集合数据,自动生成转换过渡集合

#有判断的循环,转换成小写
>>>L1 = ['Hello', 'World', 18, 'Apple', None]
>>>[s.lower() for s in L1 if isinstance(s, str)]
['hello', 'world', 'apple']
#嵌套循环
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
#字典
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

生成器

#b的值直接赋给了a,a+b的值直接赋给了b,没有临时变量完成了交换
a, b = b, a + b
#这样的格式用于捕获直接使用next函数导致的异常值
try:
    pass
except StopIteration as e:
    raise #ex.value
else:
    pass
finally:
    pass
#杨辉三角
def triangles():
    L = [1]
    while True:
        yield L[:]
        L.append(0)
#打印出修改结果前的数据,便于理解列表生成式
        #print('循环修改前',L)
        L = [L[i - 1] + L[i] for i in range(len(L))]
#调用杨辉三角
for t in triangles():
    print(t)

迭代器

上一篇 下一篇

猜你喜欢

热点阅读