您的位置:首页 > 编程语言 > Python开发

Python中dict用法详解

2017-07-30 00:33 676 查看
dict 称作字典(dictionary)。

常见的形式

Dict = {'spam':1,'eggs':2}  单层key,value形式的字典

Dict = {'mans':{'jack':1,'john':2}}  嵌套字典

普通的用法

len(Dict) 长度,储存对象的数量

Dict["spam"] = 3 新建/修改键值

del Dict["spam"]  删除键

构造方法

>>> Dict = {}  

{}

>>> Dict = dict.fromkeys(['a','b'])

{'a':None,'b':None}

>>> Dict = dict(zip(["a","b"],["1","2"]))

{'a':'1','b':'2'}

>>> Dict = dict(a="1",b="2")

{'a':'1','b':'2'}

操作方法

Dict = {'a':1,'b':2,'c':3,'d':4}

Dict.has_key(key)  判断一个字典是否有某个key

>>> Dict.has_key('b')

True

>>> Dict.has_key('e')

False

Dict.keys()  获得一个字典所有的key,存入一个list中

>>> Dict.keys()

['a','b','c','d']

Dict.values() 获得一个字典所有的value,存入一个list中

[1,2,3,4]

Dict.copy()  将一个Dict拷贝给另一个Dict,而不是传索引

>>> Dict_1 = Dict.copy()

>>> Dict_1['a'] = 0

>>> Dict_1,Dict

{'a':0,'b':2,'c':3,'d':4},{'a':1,'b':2,'c':3,'d':4}

如果是Dict_1 = Dict 那么任意dict改变之后,另外一个也会改变,=号赋值是引用传递

Dict.get(key, default) 获得指定key的值,如果没有值,返回default值

>>> Dict.get('a')

0

>>> Dict.get('e',100)

100

Dict.update(Dict_1) 遍历Dict_1来更新Dict   (  PS: 类似与jQuery中的  p = $.extend({....},p);   )

help(Dict.update)的内容如下:

update(...)

    D.update(E, **F) -> None.  Update D from dict/iterable E and F.

    If E has a .keys() method, does:     for k in E: D[k] = E[k]

    If E lacks .keys() method, does:     for (k, v) in E: D[k] = v

    In either case, this is followed by: for k in F: D[k] = F[k]

>>> Dict_1 = Dict.copy()

>>> Dict_1["e"] = 100

>>> Dict_1["a"] = -1

>>> Dict,Dict_1

{'a':1,'b':2,'c':3,'d':4},{'a':-1,'b':2,'c':3,'d':4,'e':100}

>>> Dict.update(Dict_1)

>>> Dict

{'a':-1,'b':2,'c':3,'d':4,'e':100}

Dict.pop(key)  取出一个key,并从dict中移除他

>>> Dict.pop('a')

1

>>> Dict

{'b':2,'c':3,'d':4}

Dict.clear()  清空字典

>>> Dict.clear()

{}

Dict.items()  把dict变为可遍历的元组数组

>>> Dict.items()

[('a',1),('b',2),('c',3),('d',4)]

>>> for k,v in Dict.items():

...           print k,v

...

a 1

b 2

c 3

d 4

#字典的添加、删除、修改操作

dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}

dict["w"] = "watermelon"

del(dict["a"])

dict["g"] = "grapefruit"

print dict.pop("b")

print dict

dict.clear()

print dict

#字典的遍历

dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}

for k in dict:

    print "dict[%s] =" % k,dict[k]

#字典items()的使用

dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}

#每个元素是一个key和value组成的元组,以列表的方式输出

print dict.items()

#调用items()实现字典的遍历

dict = {"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}

for (k, v) in dict.items():

    print "dict[%s] =" % k, v

#调用iteritems()实现字典的遍历

dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}

print dict.iteritems()

for k, v in dict.iteritems():

    print "dict[%s] =" % k, v

for (k, v) in zip(dict.iterkeys(), dict.itervalues()):

    print "dict[%s] =" % k, v

   

#使用列表、字典作为字典的值

dict = {"a" : ("apple",), "bo" : {"b" : "banana", "o" : "orange"}, "g" : ["grape","grapefruit"]}

print dict["a"]

print dict["a"][0]

print dict["bo"]

print dict["bo"]["o"]

print dict["g"]

print dict["g"][1]

 

dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}

#输出key的列表

print dict.keys()

#输出value的列表

print dict.values()

#每个元素是一个key和value组成的元组,以列表的方式输出

print dict.items()

dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}

it = dict.iteritems()

print it

#字典中元素的获取方法

dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}

print dict

print dict.get("c", "apple")         

print dict.get("e", "apple")

#get()的等价语句

D = {"key1" : "value1", "key2" : "value2"}

if "key1" in D:

    print D["key1"]

else:

    print "None"

#字典的更新

dict = {"a" : "apple", "b" : "banana"}

print dict

dict2 = {"c" : "grape", "d" : "orange"}

dict.update(dict2)

print dict

#udpate()的等价语句

D = {"key1" : "value1", "key2" : "value2"}

E = {"key3" : "value3", "key4" : "value4"}

for k in E:

    D[k] = E[k]

print D

#字典E中含有字典D中的key

D = {"key1" : "value1", "key2" : "value2"}

E = {"key2" : "value3", "key4" : "value4"}

for k in E:

    D[k] = E[k]

print D

#设置默认值

dict = {}

dict.setdefault("a")

print dict

dict["a"] = "apple"

dict.setdefault("a","default")

print dict

#调用sorted()排序

dict = {"a" : "apple", "b" : "grape", "c" : "orange", "d" : "banana"}

print dict  

#按照key排序 

print sorted(dict.items(), key=lambda d: d[0])

#按照value排序 

print sorted(dict.items(), key=lambda d: d[1])

#字典的浅拷贝

dict = {"a" : "apple", "b" : "grape"}

dict2 = {"c" : "orange", "d" : "banana"}

dict2 = dict.copy()

print dict2

#字典的深拷贝

import copy

dict = {"a" : "apple", "b" : {"g" : "grape","o" : "orange"}}

dict2 = copy.deepcopy(dict)

dict3 = copy.copy(dict)

dict2["b"]["g"] = "orange"

print dict

dict3["b"]["g"] = "orange"

print dict

补充:

1 初始化

>>> d = dict(name='visaya', age=20)

>>> d = dict(zip(['name', 'age'], ['visaya', 20]))

#dict.fromkeys(listkeys, default=0) 把listkeys中的元素作为key均赋值为value,默认为0

>>> d = dict.fromkeys(['a', 'b'], 1)

>>> d

{'a': 1, 'b': 1}

2 字典视图和几何

dict.keys()类似信使可以进行交集和并集等集合操作(类似集合,因为不存在重复的项),但dict.values()不可以进行如上操作。

>>> k = d.keys()

>>> k

dict_keys(['a', 'b'])

>>> list(k)

['a', 'b']

>>> k | {'x': 3}

{'a', 'x', 'b'}

>>> k | {'x'}

{'a', 'x', 'b'}

>>> k | {'x', 'y'}

{'a', 'y', 'b', 'x'}

>>> k & {'x'}

set()

>>> v = d.values()

>>> v

dict_values([1, 2])

>>> v | {'x'}

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: unsupported operand type(s) for |: 'dict_values' and 'set'

3 排序字典键

两种方法:

3.1 sort:

>>> Ks = list(d.keys())

>>> Ks.sort()

>>> for k in Ks:

...     print(k, d[k])

... 

a 1

b 2

3.2 sorted:

>>> for k in sorted(d.keys()):

...     print(k, d[k])

... 

a 1

b 2

3.3 注意

>>> for k in list(d.keys()).sort():

...     print(k, d[k])

... 

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: 'NoneType' object is not iterable

出错原因:

list.sort() list.append()函数都是对自身的操作,没有返回值,故需先将list(d.keys())的结果保存下来,在结果上进行sort()

4 常用函数

4.1 get()

D.get(k[, d])   => D[k] if k in D else d. d defaults to none.

4.2 pop()

D.pop(value[, d])   => Remove specified key and return the corresponding value. If key is not found, d is returned if given, otherwise KeyError is raised.

4.3 udpate()

    D.update(E, **F) -> None.  Update D from dict/iterable E and F.

    If E has a .keys() method, does:     for k in E: D[k] = E[k]

    If E lacks .keys() method, does:     for (k, v) in E: D[k] = v

    In either case, this is followed by: for k in F: D[k] = F[k]

>>> d = dict(name='visaya', age=21)

>>> d1= {'age': 20, 'sex': 'male'}

>>> d2 = zip(['a', 'b'], [1, 2])

>>> d.update(d1)

>>> d

{'age': 20, 'name': 'visaya', 'sex': 'male'}

#for k in d1: d[k] = d1[k]

>>> d.update(d2)

>>> d

{'age': 20, 'name': 'visaya', 'sex': 'male'}

#for (k, v) in d2: d[k] = v

4.4 del()

del D[key]

4.5 clear()

4.6 copy()

Python中的dict

初始化

构造方法创建

Python代码  

d = dict()  

d = dict(name="nico", age=23)  

d = dict((['name', "nico"], ['age', 23]))  

 当然还有更方便,简单的

Python代码  

d = {}  

d = {"name":"nico", "age":23}  

 

 

遍历

通过对key的遍历,遍历整个dict

 

Python代码  

d = {"name":"nico", "age":23}  

for key in d:  

    print "key=%s, value=%s" % (key, d[key])  

      

for key in d.iterkeys():  

    print "key=%s, value=%s" % (key, d[key])  

      

for key in d.keys():  

    print "key=%s, value=%s" % (key, d[key])  

      

for key in iter(d):  

    print "key=%s, value=%s" % (key, d[key])  

      

for key,item in d.items():  

    print "key=%s, value=%s" % (key, item)  

 

 当然也可以直接遍历value

 

Python代码  

d = {"name":"nico", "age":23}  

for value in d.values():  

    print value  

      

for key,value in d.viewitems():  

    print "key=%s, value=%s" % (key, value)  

  

for value in d.viewvalues():  

    print "value=%s" % (value)  

这里values和viewvalues的区别

 

后者返回的是该字典的一个view对象,类似数据库中的view,当dict改变时,该view对象也跟着改变

 

常用方法

 

Python代码  

d = {"name":"nico", "age":23}  

d["name"] = "aaaa"  

d["address"] = "abcdefg...."  

print d   #{'age': 23, 'name': 'aaaa', 'address': 'abcdefg....'}  

 

 

获取dict值

Python代码  

print d["name"]               #nico  

print d.get("name")         #nico  

 

 如果key不在dict中,返回default,没有为None

Python代码  

print d.get("namex", "aaa")       #aaa  

print d.get("namex")                  #None  

 

排序sorted()

Python代码  

d = {"name":"nico", "age":23}  

for key in sorted(d):  

    print "key=%s, value=%s" % (key, d[key])  

#key=age, value=23  

#key=name, value=nico  

 

 

删除del

Python代码  

d = {"name":"nico", "age":23}  

Python代码  

del d["name"]  

#如果key不在dict中,抛出KeyError  

del d["names"]  

Python代码  

Traceback (most recent call last):  

  File "F:\workspace\project\pydev\src\ddd\ddddd.py", line 64, in <module>  

    del d["names"]  

KeyError: 'names'  

 

 

清空clear()

Python代码  

d = {"name":"nico", "age":23}  

d.clear()  

print d                                                    #{}  

 

copy()

Python代码  

d1 = d.copy()               #{'age': 23, 'name': 'nico'}  

#使用返回view对象  

d2 = d1.viewitems()    #dict_items([('age', 23), ('name', 'nico')])  

#修改字典d1,新增元素  

d1["cc"] = "aaaaaa"   

print d2                   

#dict_items([('cc', 'aaaaaa'), ('age', 23), ('name', 'nico')])  

 

 

pop(key[, default])

如果key在dict中,返回,不在返回default

Python代码  

#如果key在dict中,返回,不在返回default  

print d.pop("name", "niccco")                #nico  

print d.pop("namezzz", "niccco")           #niccco  

#key不在dict中,且default值也没有,抛出KeyError  

print d.pop("namezzz")                         #此处抛出KeyError  

 

popitem()

删除并返回dict中任意的一个(key,value)队,如果字典为空会抛出KeyError

Python代码  

d = {"name":"nico", "age":23}  

print d.popitem()       #('age', 23)  

print d.popitem()       #('name', 'nico')  

#此时字典d已为空  

print d.popitem()      #此处会抛出KeyError  

 

update([other])

将字典other中的元素加到dict中,key重复时将用other中的值覆盖

Python代码  

d = {"name":"nico", "age":23}  

d2 = {"name":"jack", "abcd":123}  

d.update(d2)  
print d     #{'abcd': 123, 'age': 23, 'name': 'jack'}  

======================

补充知识

一: dictionary 操作:

     Dictionary:定义了键和值之间一对一的关系,像 Visual Basic 中的 Scripting.Dictionary 对象的实例;像 Java 中的
Hashtable 类的实例;像 Perl 中的 hash (哈希数组)。在 Perl 中,存储哈希值的变量总是以 % 字符开始;在 Python 中,变量可以任意取名,并且 python 在内部会记录下其数据类型。

     1.定义 Dictionary:

          >>> d = {"server":"mpilgrim", "database":"master"} 

          >>> d

           {'server': 'mpilgrim', 'database': 'master'}

          >>> d["server"]                                    

           'mpilgrim'

          >>> d["database"]                                 

           'master'

    新 dictionary,它有两个元素,将其赋给变量 d 。每一个元素都是一个 key-value 对;整个元素集合用大括号括起来。

'server' 是一个 key,它所关联的值是通过 d["server"] 来引用的,为 'mpilgrim'。

'database' 是一个 key,它所关联的值是通过 d["database"] 来引用的,为 'master'。
      可以通过 key 来引用其值,但是不能通过值获取 key,

         >>> d["mpilgrim"]                                  (4)

          Traceback (innermost last):

             File "<interactive input>", line 1, in ?

          KeyError: mpilgrim

      2.修改 Dictionary

 

       >>> d["database"] = "pubs" (1)

       >>> d

        {'server': 'mpilgrim', 'database': 'pubs'}

       >>> d["uid"] = "sa"        (2)

       >>> d

        {'server': 'mpilgrim', 'uid': 'sa', 'database': 'pubs'}

  一个 dictionary 中不能有重复的 key。给一个存在的 key 赋值会覆盖原有的值。Dictionary 没有元素顺序的概念,它们只是序偶的简单排列。dictionary 的 key 是大小写敏感的。

       >>> d = {}

       >>> d["key"] = "value"

       >>> d["key"] = "other value" (1)

       >>> d

         {'key': 'other value'}

       >>> d["Key"] = "third value" (2)

       >>> d

         {'Key': 'third value', 'key': 'other value'}
为一个已经存在的 dictionary key 赋值,将简单覆盖原有的值。这不会为一个已经存在的 dictionary key 赋值,因为在 Python 中是区分大小写的,也就是说 'key' 与 'Key' 是不同的。所以这种情况将在 dictionary 中创建一个新的 key-value 对。Dictionary 不只是用于存储字符串。Dictionary 的值可以是任意数据类型,包括字符串、整数、对象,甚至其它的 dictionary。在单个 dictionary 里,dictionary
的值并不需要全都是同一数据类型,可以根据需要混用和匹配。


    3.dictionary 中删除元素

    >>> d

     {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master',42: 'douglas', 'retrycount': 3}

    >>> del d[42] (1)

    >>> d

     {'server': 'mpilgrim', 'uid': 'sa', 'database': 'master', 'retrycount': 3}

    >>> d.clear() (2)

    >>> d

     {}

del 允许您使用 key 从一个 dictionary 中删除独立的元素。

clear 从一个 dictionary 中清除所有元素。注意空的大括号集合表示一个没有元素的 dictionary。


 

二、List 操作

    List 是 Python 中使用最频繁的数据类型, 如同 Perl 中的数组。在 Perl 中,用来保存数组的变量总是以 @ 字符开始;在 Python 中,变量可以任意取名,并且 Python 在内部会记录下其数据类型。 更像 Java 中的数组 (您可以简单地这样理解,但 Python 中的 list 远比 Java 中的数组强大)。一个更好的类比是 ArrayList 类,它可以保存任意对象,并且可以在增加新元素时动态扩展。
    1. 定义 List

     >>> li = ["a", "b", "mpilgrim", "z", "example"] 

     >>> li

      ['a', 'b', 'mpilgrim', 'z', 'example']

     >>> li[0]                                      

      'a'

     >>> li[4]                                     

      'example'
List 是一个用方括号包括起来的有序元素的集合。

List 可以作为以 0 下标开始的数组。任何一个非空 list 的第一个元素总是 li[0]。

这个包含 5 个元素 list 的最后一个元素是 li[4],因为列表总是从 0 开始。


     2.list负索引

       >>> li

        ['a', 'b', 'mpilgrim', 'z', 'example']

       >>> li[-1] (1)

        'example'

       >>> li[-3] (2)

        'mpilgrim'
负数索引从 list 的尾部开始向前计数来存取元素。任何一个非空的 list 最后一个元素总是 li[-1]。如果负数索引使您感到糊涂,可以这样理解:li[-n] == li[len(li) - n]。所以在这个 list 里,li[-3] == li[5 - 3] == li[2]



     3.list 的索引

      >>> li

       ['a', 'b', 'mpilgrim', 'z', 'example']

      >>> li[1:3]  (1)

       ['b', 'mpilgrim']

      >>> li[1:-1] (2)

       ['b', 'mpilgrim', 'z']

      >>> li[0:3]  (3)

       ['a', 'b', 'mpilgrim']

(1):您可以通过指定 2 个索引得到 list 的子集,叫做一个 “slice” 。返回值是一个新的 list,它包含了 list 中按顺序从第一个 slice 索引 (这里为 li[1]) 开始,直到但是不包括第二个 slice 索引 (这里为 li[3]) 的所有元素。

(2):如果一个或两个 slice 索引是负数,slice 也可以工作。如果对您有帮助,您可以这样理解:从左向右阅读 list,第一个 slice 索引指定了您想要的第一个元素,第二个 slice 索引指定了第一个您不想要的元素。返回的值为在其间的每个元素。

(3):List 从 0 开始,所以 li[0:3] 返回 list 的前 3 个元素,从 li[0] 开始,直到但不包括 li[3]。

       4.list 的索引简写

        >>> li

         ['a', 'b', 'mpilgrim', 'z', 'example']

        >>> li[:3] (1)

         ['a', 'b', 'mpilgrim']

        >>> li[3:] (2) (3)

         ['z', 'example']

        >>> li[:]  (4)

         ['a', 'b', 'mpilgrim', 'z', 'example']

(1):如果左侧分片索引为 0,您可以将其省略,默认为 0。所以 li[:3] 同 例 3.8 中的li[0:3] 是一样的。

(2):同样的,如果右侧分片索引是 list 的长度,可以将其省略。所以 li[3:] 同 li[3:5] 是一样的,因为这个 list 有 5 个元素。

(3):请注意这里的对称性。在这个包含 5 个元素的 list 中,li[:3] 返回前 3 个元素,而 li[3:] 返回后 2 个元素。实际上,li[:n] 总是返回前 n 个元素,而 li[n:] 将返回剩下的元素,不管 list 有多长。

(4):如果将两个分片索引全部省略,这将包括 list 的所有元素。但是与原始的名为 li 的 list 不同,它是一个新 list,恰好拥有与 li 一样的全部元素。li[:] 是生成一个 list 完全拷贝的一个简写。


         5. list 中增加元素

           >>> li

             ['a', 'b', 'mpilgrim', 'z', 'example']

           >>> li.append("new")               (1)

           >>> li

             ['a', 'b', 'mpilgrim', 'z', 'example', 'new']

           >>> li.insert(2, "new")            (2)

           >>> li

             ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new']

           >>> li.extend(["two", "elements"]) (3)

           >>> li

           ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']

append 向 list 的末尾追加单个元素。

insert 将单个元素插入到 list 中。数值参数是插入点的索引。请注意,list 中的元素不必唯一,现在有两个独立的元素具有 'new' 这个值,li[2] 和 li[6]。

extend 用来连接 list。请注意不要使用多个参数来调用 extend,要使用一个 list 参数进行调用。在本例中,这个 list 有两个元素。


 注:extend (扩展) 与 append (追加) 的差别:

        >>> li = ['a', 'b', 'c']

       >>> li.extend(['d', 'e', 'f']) (1)

       >>> li

        ['a', 'b', 'c', 'd', 'e', 'f']

      >>> len(li)                    (2)

        6

      >>> li[-1]

       'f'

     >>> li = ['a', 'b', 'c']

     >>> li.append(['d', 'e', 'f']) (3)

     >>> li

       ['a', 'b', 'c', ['d', 'e', 'f']]

     >>> len(li)                    (4)

      4

     >>> li[-1]

     ['d', 'e', 'f']

Lists 的两个方法 extend 和 append 看起来类似,但实际上完全不同。extend 接受一个参数,这个参数总是一个 list,并且把这个 list 中的每个元素添加到原 list 中。在这里 list 中有 3 个元素 ('a'、'b' 和 'c'),并且使用另一个有 3 个元素('d'、'e' 和 'f') 的 list 扩展之,因此新的 list 中有 6 个元素。

另一方面,append 接受一个参数,这个参数可以是任何数据类型,并且简单地追加到 list 的尾部。在这里使用一个含有 3 个元素的 list 参数调用 append 方法。原来包含 3 个元素的 list 现在包含 4 个元素。为什么是 4 个元素呢?因为刚刚追加的最后一个元素本身是个 list。List 可以包含任何类型的数据,也包括其他的 list。这或许是您所要的结果,或许不是。如果您的意图是 extend,请不要使用 append。


 

     6.在 list 中搜索

          >>> li

            ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']

          >>> li.index("example") (1)

             5

          >>> li.index("new")     (2)

             2

         >>> li.index("c")       (3)

           Traceback (innermost last):

             File "<interactive input>", line 1, in ?

           ValueError: list.index(x): x not in list

         >>> "c" in li           (4)

           False

index 在 list 中查找一个值的首次出现并返回索引值。

index 在 list 中查找一个值的首次 出现。这里 'new' 在 list 中出现了两次,在 li[2] 和 li[6],但 index 只返回第一个索引,2。如果在 list 中没有找到值,Python 会引发一个异常。为它说明您的程序会由于源代码的问题而崩溃,好于在后面当您使用无效索引而引起崩溃。

测试一个值是否在 list 内,使用 in。如果值存在,它返回 True,否则返为 False 。


         7.从 list 中删除元素

             >>> li

               ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']

             >>> li.remove("z")   (1)

             >>> li

               ['a', 'b', 'new', 'mpilgrim', 'example', 'new', 'two', 'elements']

             >>> li.remove("new") (2)

             >>> li

               ['a', 'b', 'mpilgrim', 'example', 'new', 'two', 'elements']

             >>> li.remove("c")   (3)

               Traceback (innermost last):

                 File "<interactive input>", line 1, in ?

               ValueError: list.remove(x): x not in list

             >>> li.pop()         (4)

               'elements'

             >>> li

               ['a', 'b', 'mpilgrim', 'example', 'new', 'two']

remove 从 list 中删除一个值的首次出现。

remove 仅仅 删除一个值的首次出现。在这里,'new' 在 list 中出现了两次,但 li.remove("new") 只删除了 'new' 的首次出现。

如果在 list 中没有找到值,Python 会引发一个异常来响应 index 方法。

pop 是一个有趣的东西。它会做两件事:删除 list 的最后一个元素,然后返回删除元素的值。请注意,这与 li[-1] 不同,后者返回一个值但不改变 list 本身。也不同于 li.remove(value),后者改变 list 但并不返回值。


 

       8.使用 list 的运算符

           >>> li = ['a', 'b', 'mpilgrim']

           >>> li = li + ['example', 'new'] (1)

           >>> li

            ['a', 'b', 'mpilgrim', 'example', 'new']

           >>> li += ['two']                (2)

           >>> li

            ['a', 'b', 'mpilgrim', 'example', 'new', 'two']

           >>> li = [1, 2] * 3              (3)

           >>> li

            [1, 2, 1, 2, 1, 2]

Lists 也可以用 + 运算符连接起来。list = list + otherlist 相当于 list.extend(otherlist)。但 + 运算符把一个新 (连接后) 的 list 作为值返回,而 extend 只修改存在的 list。也就是说,对于大型 list 来说,extend 的执行速度要快一些。

Python 支持 += 运算符。li += ['two'] 等同于 li.extend(['two'])。+= 运算符可用于 list、字符串和整数,并且它也可以被重载用于用户自定义的类中。

* 运算符可以作为一个重复器作用于 list。li = [1, 2] * 3 等同于 li = [1, 2] + [1, 2] + [1, 2],即将三个 list 连接成一个。


 

三、Tuple 介绍
    Tuple 是不可变的 list。一旦创建了一个 tuple,就不能以任何方式改变它。 Tuple 没有方法,您不能向 tuple 增加元素。Tuple 没有 append 或 extend 方法。您不能从 tuple 删除元素。Tuple 没有 remove 或 pop 方法。您不能在 tuple 中查找元素。Tuple 没有 index 方法。然而,您可以使用 in 来查看一个元素是否存在于 tuple 中。

     1.定义 tuple

        >>> t = ("a", "b", "mpilgrim", "z", "example") (1)

        >>> t

         ('a', 'b', 'mpilgrim', 'z', 'example')

        >>> t[0]                                       (2)

         'a'

        >>> t[-1]                                      (3)

         'example'

        >>> t[1:3]                                     (4)

         ('b', 'mpilgrim')

定义 tuple 与定义 list 的方式相同,但整个元素集是用小括号包围的,而不是方括号。

Tuple 的元素与 list 一样按定义的次序进行排序。Tuples 的索引与 list 一样从 0 开始,所以一个非空 tuple 的第一个元素总是 t[0]。

负数索引与 list 一样从 tuple 的尾部开始计数。

与 list 一样分片 (slice) 也可以使用。注意当分割一个 list 时,会得到一个新的 list ;当分割一个 tuple 时,会得到一个新的 tuple。
那么使用 tuple 有什么好处呢?

1.Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list。

2.如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换 (需要使用一个特殊的函数)。
3.Tuples 可以在 dictionary 中被用做 key,但是 list 不行。实际上,事情要比这更复杂。Dictionary key 必须是不可变的。Tuple 本身是不可改变的,但是如果您有一个 list 的 tuple,那就认为是可变的了,用做 dictionary key 就是不安全的。只有字符串、整数或其它对 dictionary 安全的 tuple 才可以用作 dictionary key。

4.Tuples 可以用在字符串格式化中。

Tuple 可以转换成 list,反之亦然。内置的 tuple 函数接收一个 list,并返回一个有着相同元素的 tuple。而 list 函数接收一个 tuple 返回一个 list。从效果上看,tuple 冻结一个 list,而 list 解冻一个 tuple。

======================

list 和 tuple 的相互转化

tuple(ls) 

list(ls)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: