ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python学习-高级特性

2021-11-27 23:02:28  阅读:188  来源: 互联网

标签:Iterator python list 高级 特性 range print isinstance Iterable


切片

# 切片获取list或tuple的部分元素
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
print(L[0:3])
# L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
# 如果第一个索引是0,还可以省略:
print(L[:3])
# 倒数切片(倒数第一个索引是-1)
print(L[-1:],L[0:-1])

ls = list(range(101))
# 第二个:后表示间隔
print(ls[::5])
# 字符串和tuple 是不可变序列, 也能使用切片, 返回的是新的拷贝对象
strs="this is my life"
tups=(1,2,3,4,5,64,6,7)
print(strs[0:-1:2],tups[0:-1:3])

迭代

li = list(range(0,100,3))
dict =  {'a': 1, 'b': 2, 'c': 3}
strs = "this is a simple string"
# for i in li:
#     print(i)

# for k in dict:
#     print(k)
   
# for s in strs:
    # print(s)
    
# 只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。
# 判断是否可迭代
from collections.abc import Iterable
print(isinstance(dict.keys,Iterable))
print(isinstance(li,Iterable))
print(isinstance(strs,Iterable))

# 获取下标
# for i,value in enumerate(li):
    # print(i,value)
# 同时引用两个变量
for x, y in [(1, 1), (2, 4), (3, 9)]:
    print(x,y)
    

列表生成器

# 生成间隔为1的序列[0,10)
print(list(range(1,11,1)))
# 生成[1x1, 2x2, 3x3, ..., 10x10]: for前面表达式进行计算, 后面的if语句用于过滤
print([x*x for x in list(range(1,11))])
# for循环后面还可以加上if判断(if语句用于过滤, 不能添加else)
print([x*x for x in list(range(1,11)) if(x % 2 == 0)])
# 使用两层循环,可以生成全排列
print([m + n for m in 'ABC' for n in 'XYZ'])
# 列出当前目录下的所有文件和目录名
import os
print([d for d in os.listdir('.')])
# 使用两个变量来生成list
d = {'x': 'A', 'y': 'B', 'z': 'C' }
print([k+'='+v for k,v in d.items()])

列表生成器

# 必须事先将所有数据存储到容器中,才能开始迭代;而生成器却不同,它可以实现在迭代的同时生成元素。
# 方法一:把一个列表生成式的[]改成(),就创建了一个generator
L = [x * x for x in range(10)]
print(type(L),L) 
g = (x * x for x in range(10))
print(type(g),g,next(g),next(g)) 

# for n in g:
    # print(n)

# 斐波那契数列
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        # print(b)
        a, b = b, a + b
        n = n + 1
    return 'done'
# fib(10)

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        # 使用yield将方法变为生成器
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
print(type(fib(10)))

for n in fib(10):
    print(n)

迭代器

# 可以直接作用于for循环的数据类型有以下几种:
# 一类是集合数据类型,如list、tuple、dict、set、str等;
# 一类是generator,包括生成器和带yield的generator function。
# 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
# 可以使用isinstance()判断一个对象是否是Iterable对象:
from collections import Iterable
from typing import Iterator
print(isinstance({},Iterable))
print(isinstance([],Iterable))
print(isinstance('abc',Iterable))
print(isinstance((x for x in range(10)),Iterable))
print(isinstance(100,Iterable))# False

# 被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
print(isinstance({},Iterator)) # False
print(isinstance([],Iterator)) # False
print(isinstance('abc',Iterator)) # False
print(isinstance((x for x in range(10)),Iterator)) # True

# 生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator
# 使用iter() 函数将list, dict,str转为Iterator
print(isinstance(iter({}),Iterator)) # True
print(isinstance(iter([]),Iterator)) # True
print(isinstance(iter('abc'),Iterator)) # True

# Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误
# Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。数据长度不确定 使用list是永远不可能存储全体自然数的。

# 一个 Iterator 对象需且仅需同时具有 __iter__ 和 __next__ 方法
class IteratorExample:
    def __iter__(self):
        pass
    def __next__(sefl):
        pass

print(isinstance(IteratorExample(), Iterator)) # True

标签:Iterator,python,list,高级,特性,range,print,isinstance,Iterable
来源: https://blog.csdn.net/weixin_37978626/article/details/121585076

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有