• Python 高级特性


    切片及其用法 

    对于一个列表 L = [1, 2, 3, 4, 5, 6, 7, 8, 9],我们使用切片来获取特定元素 

    #获取第1个到第3个(数组下标从0开始,切片是左闭右开的区间,也就是包含0,不包含3)
    L[0:3]
    
    #获取第2个到第五个
    L[1:5]
    
    #取倒数第5个到倒数第2个
    L[-5:-1]
    
    #取第2个到最后一个
    L[3:]
    
    #前5个数,每2个取一个
    L[:5:2]
    
    #所有数,每个两个取一个
    L[::2]

    什么类型能进行切片?

    • 字符串
    • 列表
    • 元组

    注意:集合、字典不能进行切片操作 

     

    列表生成式 

    生成式的基本语法 

    • [expr for iter_var in iterable]
    • [expr for iter_var in iterable if cond_expr

    第一种语法:首先迭代 iterable 里所有内容,每一次迭代,都把 iterable 里相应内容放到iter_var 中,再在表达式中应用该 iter_var 的内容,最后用表达式的计算值生成一个列表。

    第二种语法:加入了判断语句,只有满足条件的内容才把 iterable 里相应内容放到 iter_var 中,再在表达式中应用该 iter_var 的内容,最后用表达式的计算值生成一个列表。 

    #生成一个10个元素的数据,每个分别对应 1-10的两倍
    my_list = [x * 2 for x in range(1, 11)]
    print(my_list)
    
    #生成一个100以内所有偶数的列表
    my_list = [x for x in range(1, 101) if x % 2 == 0]
    print(my_list)
    
    #使用列表生成式生成[[1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5]] 这
    样的列表
    my_list = [[x, y] for x in range(1, 3) for y in range(6)]
    print(my_list)

    迭代 

    Python中,只要是可迭代的对象,无论有没有下标,都可以进行迭代,比如:listsettuplestrdict 

    如何判断一个对象是不是可迭代的?

    from collections.abc import Iterable
    print(isinstance('aaa', Iterable))

    如果可迭代对象里的数据成对出现,想一次性遍历出两个对象,怎么办?

    for x, y in [(1, 2), (4, 5)]:
      print("x+y=", x + y)

    生成器 

    通过列表生成式,可以直接创建一个列表,但是,受到内存的限制,列表容量是有限的,当列表元素很大的时候,会很浪费内存空间。所以可以通过生成器 Generator 生成。 

    生成器是一种一边循环一边计算的机制。

    相比于列表生成式,只需将最外层的[ ]换成( )即可。随着变换,返回的类型也随着变动

    #列表生成式,返回的是list: 
    print(type([x * 2 for x in range(1, 11)])) 
    
    #生成器,返回的是generator类型: 
    print(type((x * 2 for x in range(1, 11)))) 

    生成器怎么使用? 

    直接使用next(generator) 

    c= (x * 2 for x in range(1, 11))
    print(next(range_))
    print(next(range_))
    print(next(range_))
    print(next(range_))

    缺点:有多少个可获取的元素不可预估,当超出范围之后,会报StopIteration 

    使用循环 

    range_ = (x * 2 for x in range(1, 11))
    for i in range_:
        print(i)

    这种方式更加灵活,不用担心StopInteration 

  • 相关阅读:
    用户界面线程(含有消息泵的线程)主线程与用户界面线程的通信
    poj 2151 Check the difficulty of problems 概率dp
    Codeforces 148D Bag of mice 概率dp
    [置顶] UVa在线比赛单题汇总DP专题
    UVa 10405 Longest Common Subsequence 最长公共子序列模板
    UVa 12018 Juice Extractor 切水果dp暂时存疑
    UVa 674 Coin Change 背包dp
    hdu 3853 LOOPS 圆环之理 概率dp
    UVa 111 History Grading 最长递增子序列 LIS
    UVa在线比赛单题汇总DP专题
  • 原文地址:https://www.cnblogs.com/jwen1994/p/13124217.html
Copyright © 2020-2023  润新知