zoukankan      html  css  js  c++  java
  • Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结

    一、概述:
    Python中两种基本的数据结构是序列和映射,序列包含:可变的列表和不可变的元组;而当序列不够用时就出现了映射:字典。列表中的元素是可以变化的,元组里面的元素一旦初始化后就不可更改。列表和元组只是一类元数据的集合体,还不能满足通过名字引用值的数据,故字典就充当了这个功能角色。

    二、列表(list):
    1.写法示例:x=[1,2,3,4,5] y=['1','2','3','4','5']


    2.索引:
    x[0]
    =>1
    y[0]
    =>'1'


    3.分片:x[:]
    =>[1,2,3,4,5]
    x[0:3]
    =>[1,2,3]
    x[0:4:2]
    =>[1,3]
    可以看出,第一个数字表示起始元素的索引值,第二个数字表示结束元素的值,但不包含它,第三个是步长。注意:这三个数字都可以是负值。


    4.序列相加:x+y
    =>[1, 2, 3, 4, 5, '1', '2', '3', '4', '5']


    5.乘法:x*5
    =>[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]


    6.成员资格:
    1 in x
    => True
    6 in x
    => False


    7.min,max,len:
    min(x)
    =>1
    max(x)
    =>5
    len(x)
    =>5


    8.list函数:list('Hello')
    =>['H','e','l','l','o']


    9.元素赋值:x[0]=11
    => x=[11,2,3,4,5]


    10.删除元素:del x[0]
    => x=[2,3,4,5]


    11.分片赋值:x[0:3]=[11,22,33]
    => x=[11,22,33,4,5]


    12.append: x.append(6)
    => x=[1,2,3,4,5,6]


    13.count: 查找x中元素1出现的次数: x.count(1)
    => 1


    14.extend:将一个列表追加到列表末尾: x.extend([6,7,8])
    => x=[1,2,3,4,5,6,7,8]


    15.index:找出某个元素的索引位置:x.index(2)=1


    16.insert:将元素插入到指定索引前:x.insert(2,10)
    => x=[1,2,10,3,4,5]


    17.pop:移除列表中的一个元素,并返回这个元素: x.pop()
    =>5
    x.pop(0)
    =>1


    18.remove:移除列表中某个值的第一个匹配项:x.remove(1)
    =>x=[2,3,4,5]


    19.reverse:反向存放:x.reverse() => x=[5,4,3,2,1]


    20.sort,sorted:将列表排序:x.reverse()
    => x=[5,4,3,2,1]
    => x.sort()
    => x=[1,2,3,4,5]
    注意:sort并不返回任何值,即:
    z=x.sort()
    =>z = None.
    如果你想对x排序,并且要保留x,有两种方法共选择:
    (1)z=x[:]
    z.sort()
    => z=[5,4,3,2,1]
    (2)z=sorted(x)


    21.高级排序:如果你希望按照某种特定的方式排序,可以将函数、方法名作为参数传递给sort.
    x.sort(key=cmp,reverse=True) ,其中key和reverse叫做关键字参数,所以您也可以这样写:x.sort(reverse=True,key=cmp),也就是关键字参数可以任意调整参数顺序。
    说明:函数cmp(a,b),a>b =>1 , a<b =>-1, a=b =>0
    任何适用于列表内元素的函数都可以作为key值传递进去,当然你也可以传递自定义的函数,个人感觉很像.net里面的委托。

    三、元组
    元组不可修改,字符串也是不可修改的,这个.net中的字符串是一个意思,每次对字符使用+时,都是重新申请了一段新的地址空间,所以我们在处理字符串频繁修改型程序时一般都用StringBuilder.
    由于元组和列表最大的不同就是不可修改,所以列表中的 9.元素赋值,10.删除元素,11.分片赋值,12.append,14.extend,16.insert,17.pop,18.remove,19.reverse,20.sort,21.高级排序任何妄图修改元组的函数都不支持。

    1.写法:x=1,2,3,4,5 或者 x=(1,2,3,4,5) 或者
    x=1, =>x =(1)


    2.乘法:
    x=(1,2,3,4,5)
    x*3
    =>(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5)


    3.tuple:tuple函数和list函数基本一致:tuple('Hello')
    =>('H','e','l','l','o')


    4.索引:元组也是序列的一种,所以他也可以用索引来访问元素:
    x[0]
    => 1


    5.分片:元组也是序列的一种,所以他也可以用索引来分片:
    x[0:2]
    =>(1,2)


    6.成员资格: 1 in x
    => True
    6 in x
    => False


    7.min,max,len: min(x)
    =>1
    max(x)
    =>5
    len(x)
    =>5


    8.count: 查找x中元素1出现的次数: x.count(1)
    => 1


    9.index:找出某个元素的索引位置:x.index(2)
    => 1

    四、字典
    1.写法: d={'a':1,'b':2}


    2.dict函数:将键值对转换成字典:
    items=[('a',1),('b',2)]
    d=dict(itmes)
    => d={'a':1,'b':2}


    3.另一种创建方式:d=dict(a=1,b=2)
    => {'a':1,'b':2}


    4.基本字典操作方法:
    (1)求元素个数:len(d) => 2
    (2)用键访问值:d['a'] => 1
    (3)修改值:d['a']=3
    (4)删除: del d['a']
    (5)成员资格: 'a' in d


    5.很有用的方法:格式化字符串
    通常的字符串格式化:
    'i am %s ' % 'vertor'
    => 'i am vertor'
    而如果应字典格式化就可以实现类似.net中string.format()的功能了:
    d={'name':'vertor','age'=20}
    'i am %(name)s, and %(age)s years old' % d
    => i am vertor, and 20 years old.


    6.clear:清除所有元素


    7.浅复制(shallow copy)copy函数:
    d={'name':'verter',age:20,friends:['ali','qq','baidu']}
    d2=d.copy()
    d2['name']='smith' #用新的值替换原来的值
    d2['friends'].remove('qq') #修改原来的值
    =>d2
    =>{'name':'smith',age:20,friends:['ali','baidu']}
    =>d
    =>{'name':'verter',age:20,friends:['ali','baidu']}
    可以看到,在副本中替换值不会影响到原始字典;而如果修改了副本,原始字典也会被修改。
    如果要避免这种情况就需要用到深复制:deepcopy


    8.深复制(deepcopy):deepcopy函数


    9.fromkeys:使用给定的键建立新的字典
    {}.fromkeys(['name','age'])
    =>{'name':None,'age':None}
    dict.fromkeys(['name','age'])
    =>{'name':None,'age':None}
    dict.fromkeys(['name','age'],'verter')
    =>{'name':'verter','age':'verter'}


    10.get:另一种用键访问元素值的方法
    d={'name':'verter','age':20}
    =>d.get('name')
    =>'verter'
    =>d.get('friends')
    =>None
    注意:get与d['friends']的区别是后者会抛出KeyError异常,而get不会,他只是返回None.


    11.has_key:
    d={'name':'verter','age':20}
    =>d.has_key('name')
    =>True
    注意:python3抛弃了这个API.


    12.items和iteritems
    (1)items将字典所有以<strong>列表</strong>的形式返回。
    d={'name':'verter','age':20}
    =>d.items()
    =>[('name', 'verter'), ('age', 20)]
    (2)iteritems作用大致相同,不过它是返回一个迭代器对象而不是列表
    d={'name':'verter','age':20}
    =>it=d.iteritems()
    =>list(it)
    =>[('name', 'verter'), ('age', 20)]
    注意:在python3.0中将iteritems私有化了,变成了__iter__(),不知何故,难道这个功能太蛋疼,被抛弃了?

    13.keys和iterkeys
    d={'name':'verter','age':20}
    =>for k in x.keys(): print(k)
    =>'name'
    =>'age'
    同理:iterkeys返回迭代器,并且也被python3.0抛弃了,不再提供此方法了。

    14.pop:返回对应键,并将他从字典中移除
    d.pop('name')
    =>'verter'
    =>d
    =>{'age':20}

    15.popitem:不带参数,弹出一个随机元素。
    d.popitem()
    =>{'name','verter'}
    这个对事先不知道键的情况下很有用。

    16.setdefault:设置默认值。

    17.update:利用一个字段更新另外一个字典,当然是更新对应键的值
    d={'name':'verter','age':20}
    =>d2={'name':'verter2'}
    =>d.update(d2)
    =>d
    =>{'name':'verter2','age':20}

    18.values和itevalues
    (1)values:已列表形式返回字典中的值
    (2)itervalues:返回值的迭代器
    注意:python3.0还是抛弃了这个API.

    转自:http://www.deepleo.com/archives/1603

  • 相关阅读:
    现代软件工程 第一章 概论 第3题——韩婧
    现代软件工程 第一章 概论 第2题——韩婧
    小组成员邓琨、白文俊、张星星、韩婧
    UVa 10892 LCM的个数 (GCD和LCM 质因数分解)
    UVa 10780 幂和阶乘 求n!中某个因子的个数
    UVa 11859 除法游戏(Nim游戏,质因子)
    Codeforces 703C Chris and Road 二分、思考
    Codeforces 703D Mishka and Interesting sum 树状数组
    hdu 5795 A Simple Nim SG函数(多校)
    hdu 5793 A Boring Question 推公式(多校)
  • 原文地址:https://www.cnblogs.com/deepleo/p/python-list-tuple-dict.html
Copyright © 2011-2022 走看看