zoukankan      html  css  js  c++  java
  • Python学习 Part3:数据结构

    1. 深入列表:

    • 所有的列表对象方法

    list.append(x): 在列表的末尾添加一个元素

    list.extend(L): 在列表的末尾添加一个指定列表的所有元素

    list.insert(i,x): 在指定位置插入一个元素

    list.remove(x): 删除列表中值为x的第一个元素,如果不存在这样的元素则引发错误

    list.pop(i): 删除列表中指定位置元素并返回它(指元素值)。如果省略索引,a.pop()会删除并返回列表中的最后一个元素

    list.index(x): 返回列表中值为x的第一个元素的索引,如果不存在这样的元素则引发错误

    list.count(x): 返回列表中元素x出现的次数

    list.sort(): 对列表中的元素进行排序

    list.reverse(): 反转列表中的元素

    复制代码
    >>> a=[2,3,4,5,6,7,5,32,1]
    >>> a.append(9)
    >>> print(a)
    [2, 3, 4, 5, 6, 7, 5, 32, 1, 9]
    >>> a.extend([99,999])
    >>> print(a)
    [2, 3, 4, 5, 6, 7, 5, 32, 1, 9, 99, 999]
    >>> a.insert(1,9999)
    >>> print(a)
    [2, 9999, 3, 4, 5, 6, 7, 5, 32, 1, 9, 99, 999]
    >>> a.remove(5)
    >>> print(a)
    [2, 9999, 3, 4, 6, 7, 5, 32, 1, 9, 99, 999]
    >>> x=a.pop(5)
    >>> print(x)
    7
    >>> print(a.index(9999))
    1
    >>> print(a.count(9))
    1
    >>> a.sort()
    >>> print(a)
    [1, 2, 3, 4, 5, 6, 9, 32, 99, 999, 9999]
    >>> a.reverse()
    >>> print(a)
    [9999, 999, 99, 32, 9, 6, 5, 4, 3, 2, 1]
    >>> 
    复制代码
    • 用列表实现堆栈

    堆栈功能:最后添加的元素是第一个被返回的元素。要想在堆栈顶部添加一个元素,可以使用append()方法;要想要返回堆栈顶部的元素,可以使用不指定索引参数的pop()方法

    复制代码
    >>> stack=[3,4,5]
    >>> stack.append(6)
    >>> stack.append(7)
    >>> stack
    [3, 4, 5, 6, 7]
    >>> stack.pop()
    7
    >>> stack
    [3, 4, 5, 6]
    复制代码
    • 用列表实现对列

    对列功能:第一个被添加的元素第一个被返回。想要在对列尾部添加一个元素,可以使用append()方法;想要返回对列首部的元素,可以使用指定参数为0的pop()方法

    复制代码
    >>> queue=["Eric","John","Lilian"]
    >>> queue.append("Terry")
    >>> queue
    ['Eric', 'John', 'Lilian', 'Terry']
    >>> queue.pop(0)
    'Eric'
    >>> queue
    ['John', 'Lilian', 'Terry']
    复制代码
    • 列表推导式

    列表推导式为从序列中创建列表提供了一个简单的方法。

    列表推导式由包含一个表达式的括号组成,表达式后面跟随一个for子句,之后可以有零或多个for或if子句。结果是一个列表,由表达式依据其后面的for和if子句上下文计算而来的结果构成。如果希望表达式产生一个元组,则必须用括号包裹

    复制代码
    >>> vec1=[2,4,6]
    >>> vec2=[4,3,-9]
    >>> [x*y for x in vec1 for y in vec2]
    [8, 6, -18, 16, 12, -36, 24, 18, -54]
    >>> [x+y for x in vec1 for y in vec2]
    [6, 5, -7, 8, 7, -5, 10, 9, -3]
    >>> [vec1[i]*vec2[i] for i in range(len(vec1))]
    [8, 12, -54]
    >>> [str(round(355/113,i)) for i in range(1,6)]
    ['3.1', '3.14', '3.142', '3.1416', '3.14159']
    复制代码

    2. del语句

    使用索引而不是值从列表中删除一个元素。与具有返回值得pop()方法不同。del语句也可以用来删除列表的一个片段或者清空整个列表

    复制代码
    >>> a=[-1,1,3,45,6,6]
    >>> del a[0]
    >>> a
    [1, 3, 45, 6, 6]
    >>> del a[2:4]
    >>> a
    [1, 3, 6]
    >>> del a[:]
    >>> a
    []
    >>> 
    >>> #del也可以用来删除整个变量
    >>> del a
    >>> a
    Traceback (most recent call last):
      File "<pyshell#68>", line 1, in <module>
        a
    NameError: name 'a' is not defined
    >>> 
    复制代码

    3. 元组和序列

    元组由若干逗号分隔的值组成,输出时总是用括号包裹。在输入时两边的括号是可选的。

    复制代码
    >>> t=12345,54321,'Hello!'
    >>> t[0]
    12345
    >>> t
    (12345, 54321, 'Hello!')
    >>> u=t,(1,2,3)
    >>> u
    ((12345, 54321, 'Hello!'), (1, 2, 3))
    复制代码

    一个特殊的问题就是构造包含0或1个元素的元组:空元组由一对空括号构成,包含一个元素的元组需要在其后面跟一个逗号来构成

    复制代码
    >>> empty=()
    >>> singleton='Hello',
    >>> len(empty)
    0
    >>> len(singleton)
    1
    >>> singleton
    ('Hello',)
    >>> 
    复制代码

    t=12345,54321,'Hello!'语句是元组封装的一个示例,值12345,54321,‘hello!’ 被封装进一个元组,其逆反操作也是可以的:

    复制代码
    >>> t=12345,54321,'Hello!'
    >>> x,y,z=t
    >>> x
    12345
    >>> y
    54321
    >>> z
    'Hello!'
    复制代码

    4. 集合

    集合就是一个包含不同元组的无序集,基本功能包括关系测试和剔除重复记录。集合对象同样支持数学操作,像联合,交,差和对称差

    大括号或set()函数可以用来创建集合。注意:想要创建空集合,必须使用set()而不是{}。后者用于创建空字典

    复制代码
    >>> basket={'apple','orange','apple','pear','orange','banana'}
    >>> print(basket)
    {'banana', 'orange', 'pear', 'apple'}
    >>> fruit=['apple','orange','apple','pear','orange','banana']
    >>> fruit=set(basket)
    >>> fruit
    {'banana', 'orange', 'pear', 'apple'}
    >>> fruit={'orange','apple'}
    >>> fruit
    {'orange', 'apple'}
    >>> 'orange' in fruit
    True
    >>> 'crabgrass' in fruit
    False
    >>> a=set('abracadabra')
    >>> b=set('alacazam')
    >>> a
    {'b', 'r', 'a', 'd', 'c'}
    >>> a-b
    {'b', 'r', 'd'}
    >>> a|b
    {'b', 'c', 'a', 'd', 'l', 'm', 'r', 'z'}
    >>> a&b
    {'c', 'a'}
    >>> a^b
    {'b', 'd', 'l', 'm', 'r', 'z'}
    >>> a={x for x in 'abracadabra' if x not in 'abc'}
    >>> a
    {'r', 'd'}
    复制代码


    5. 字典

    与序列不同,序列式以连续的数字作为索引,而字典是以关键字作为索引。关键字可以是任意不可变类型,数字和字符串都可以作为关键字。如果元组只包含数字、字符串或元组,那么也可以作为关键字使用。不能将列表作为关键字,因为列表可以通过索引赋值、切片赋值或append(),extend()方法改变

    可以将字典解释成一个无序的key:value对,其中关键字必须是互不相同的

    字典的主要操作就是根据关键字来存储或获取值。同样可以使用del删除key:value对

    复制代码
    >>> tel={'jack':4098,'sape':4139}
    >>> tel['guido']=4127
    >>> tel
    {'guido': 4127, 'sape': 4139, 'jack': 4098}
    >>> tel['jack']
    4098
    >>> del tel['sape']
    >>> tel['irv']=4127
    >>> tel
    {'guido': 4127, 'irv': 4127, 'jack': 4098}
    >>> list(tel.keys())
    ['guido', 'irv', 'jack']
    >>> sorted(tel.keys())
    ['guido', 'irv', 'jack']
    >>> 'guido' in tel
    True
    >>> #dict()构造函数可以直接从key-value对中创建字典:
    >>> dict([('sape',4139),('guido',4127),('jack',4098)])
    {'guido': 4127, 'jack': 4098, 'sape': 4139}
    >>> # 字典推导式可以从任意的键值表达式中创建字典
    >>> {x: x**2 for x in (2,4,6)}
    {2: 4, 4: 16, 6: 36}
    复制代码

    6. 遍历技巧

    当遍历字典时,关键字及其对应的值可以使用items()方法同时获得

    复制代码
    >>> knights={'gallahad':'the pure','robin':'the brave'}
    >>> for k,v in knights.items():
        print(k,v)
    
        
    robin the brave
    gallahad the pure
    复制代码

     当遍历一个序列时,位置索引及其对应的值可以使用enumerate()函数同时获取

    复制代码
    >>> for i, v in enumerate(['tic','tac','toe']):
        print(i,v)
    
        
    0 tic
    1 tac
    2 toe
    复制代码

    想要同时遍历两个或更多序列时,可以使用zip()函数将属性组合

    复制代码
    >>> questions=['name','quest','favorite','color']
    >>> answers=['lancelot','the holy grail','blue']
    >>> for q,a in zip(questions,answers):
        print(q,a)
    
        
    name lancelot
    quest the holy grail
    favorite blue
    复制代码
  • 相关阅读:
    IA__gdk_drawable_get_size: assertion 'GDK_IS_DRAWABLE (drawable)' failed
    宿主机系统 Deepin 15.4,解决 Virtualbox 5.1 中 XP虚拟机无法使用 USB设备(如:U盘、罗技优联接收器等)的问题
    Deepin安装Virtualbox扩展包出现与gksu-run-helper通信失败的解决
    docker 学习资料收集
    从编程语言的角度看中医的【藏像】理论
    从程序员视角和编程语言角度看【中医】:一种生命健康编程语言
    使用微服务架构思想,设计部署API代理网关和OAuth2.0授权认证框架
    在Office应用中打开WPF窗体并且让子窗体显示在Office应用上
    彻底关闭Excle进程的几个方法
    70后.net老猿,尚能饭否?
  • 原文地址:https://www.cnblogs.com/zhangfeivip/p/8931415.html
Copyright © 2011-2022 走看看