zoukankan      html  css  js  c++  java
  • 高级特性

    高级特性:
    
    比如构造一个1,3,5,7,9,....,99的列表,可以通过循环实现:
    
    # -*- coding: UTF-8 -*-
    L = []
    n = 1
    while n <= 99:
        L.append(n)
        n = n + 2
    
    print L
    
    # -*- coding: UTF-8 -*-
    L = []
    n = 1
    while n <= 99:
        L.append(n)
        n = n + 2
    
    print L
    n=45
    while n <= 45:
        print L[n]
        n =n-2
    
    
    # -*- coding: UTF-8 -*-
    L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
    print L
    print L[0]
    print L[1]
    print L[2]
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
    Michael
    Sarah
    Tracy
    
    
    
    
    # -*- coding: UTF-8 -*-
    L = ('Michael', 'Sarah', 'Tracy', 'Bob', 'Jack')
    print L
    print L[0]
    print L[1]
    L[2]='xxxxxxx'
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    Traceback (most recent call last):
      File "C:/Users/TLCB/PycharmProjects/untitled/t1.py", line 6, in <module>
        L[2]='xxxxxxx'
    TypeError: 'tuple' object does not support item assignment
    ('Michael', 'Sarah', 'Tracy', 'Bob', 'Jack')
    Michael
    Sarah
    
    
    # -*- coding: UTF-8 -*-
    L = ('Michael', 'Sarah', 'Tracy', 'Bob', 'Jack')
    print L
    print L[0]
    print L[1]
    print '---------'
    for i in range(3):
        print L[i]
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    ('Michael', 'Sarah', 'Tracy', 'Bob', 'Jack')
    Michael
    Sarah
    ---------
    Michael
    Sarah
    Tracy
    
    对这种经常指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。
    
    对应上面的问题,取前3个元素,用一行代码就可以完成切片:
    
    # -*- coding: UTF-8 -*-
    L = ('Michael', 'Sarah', 'Tracy', 'Bob', 'Jack')
    print L
    print L[0]
    print L[1]
    print '---------'
    M=L[:3]
    print M
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    ('Michael', 'Sarah', 'Tracy', 'Bob', 'Jack')
    Michael
    Sarah
    ---------
    ('Michael', 'Sarah', 'Tracy')
    
    
    tuple 也是一种list,唯一区别是tuple不可变。
    
    因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
    
    
    # -*- coding: UTF-8 -*-
    print (0, 1, 2, 3, 4, 5)[:3]
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    (0, 1, 2)
    
    Unicode字符串u'xxx'
    
    
    >>> u'中文'
    u'u4e2du6587'
    >>>
    
    
    
    迭代:
    
    如果给定一个list或者tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
    
    
    在Python中,迭代是通过for ... in 来完成的,而很多语言比如C或者Java,迭代list是通过下标完成的
    
    # -*- coding: UTF-8 -*-
    L = [1, 4, 7, 'a1', 'a4', 'a7']
    for i in L:
        print i
    
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    1
    4
    7
    a1
    a4
    a7
    
    # -*- coding: UTF-8 -*-
    for ch in 'ABC':
        print ch
    
    
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    A
    B
    C
    
    # -*- coding: UTF-8 -*-
    for ch in 123:
        print ch
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    Traceback (most recent call last):
      File "C:/Users/TLCB/PycharmProjects/untitled/t1.py", line 2, in <module>
        for ch in 123:
    TypeError: 'int' object is not iterable
    
    'int' 对象是不可迭代的
    
    
    
    # -*- coding: UTF-8 -*-
    for ch in '123':
        print ch
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    1
    2
    3
    
    所以,当我们使用for循环时,只要作用域一个可迭代对象,for循环就可以正常运行,
    
    而我们不太关心该对象究竟是list还是其他数据类型。
    
    那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的iterable类型判断:
    
    
    # -*- coding: UTF-8 -*-
    from collections import Iterable
    a = '123'
    if isinstance(a, Iterable):
        for ch in a:
            print ch
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    1
    2
    3
    
    
    # -*- coding: UTF-8 -*-
    from collections import Iterable
    a = 123
    if isinstance(a, Iterable):
        for ch in a:
            print ch
    else:
     print 11111
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    11111
    
    
    from collections import Iterable
    
    从collections 导入Iterable模块:
    
    # -*- coding: UTF-8 -*-
    a= [(1, 1), (2, 4), (3, 9)]
    print a[0]
    print a[1]
    print a[2]
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    (1, 1)
    (2, 4)
    (3, 9)
    
    # -*- coding: UTF-8 -*-
    a= [(1, 1), (2, 4), (3, 9)]
    print a[0][1]
    print a[1][1]
    print a[2][1]
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    1
    4
    9
    
    # -*- coding: UTF-8 -*-
    a= [[1, 1], [2, 4], [3, 9]]
    print a[0][1]
    print a[1][1]
    print a[2][1]
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    1
    4
    9
    
    列表生成式:
    
    列表生成式即List  Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式:
    
    # -*- coding: UTF-8 -*-
    a=range(1, 11)
    print a
    a[5]='aaa'
    print a
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/t1.py
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    [1, 2, 3, 4, 5, 'aaa', 7, 8, 9, 10]
    
    
    
    但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:
    
    生成器:
    
    通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,
    
    列表容量肯定是有限的。
    
    而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅
    
    需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

  • 相关阅读:
    Blackey win10 + python3.6 + VSCode + tensorflow-gpu + keras + cuda8 + cuDN6N环境配置(转载)
    PyTorch在64位Windows下的Conda包(转载)
    经典的机器学习方面源代码库(非常全,数据挖掘,计算机视觉,模式识别,信息检索相关领域都适用的了)(转载)
    计算机视觉牛人博客和代码汇总(全)(转载)
    计算机视觉开源代码集合(转载)
    中国计算机学会推荐国际学术会议和期刊目录
    C++11 并发指南三(Lock 详解)(转载)
    C++11并发学习之三:线程同步(转载)
    MVC架构模式(转载)
    WPF中动态添加xaml资源文件
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349619.html
Copyright © 2011-2022 走看看