列表

#访问列表中的值

list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5, 6, 7 ]
 
print "list1[0]: ", list1[0]  #list1[0]:  physics
print "list2[1:5]: ", list2[1:5] #list2[1:5]:  [2, 3, 4, 5]



#删除列表元素

 

list1 = ['physics', 'chemistry', 1997, 2000]
 
print list1 #['physics', 'chemistry', 1997, 2000]
del list1[2]
print "After deleting value at index 2 : "
print list1  #['physics', 'chemistry', 2000]



#Python列表脚本操作符

print len([1, 2, 3]) #3
print [1, 2, 3] + [4, 5, 6] #[1, 2, 3, 4, 5, 6]
print ['Hi!'] * 4  #['Hi!', 'Hi!', 'Hi!', 'Hi!']
print 3 in [1, 2, 3]
for x in [1, 2, 3]: print x # 1 2 3


#列表的切片

a[1:]            #片段操作符等价于a[1:len(a)-1:1],:后面省略,表示切到列表的末尾,步长为1则可以省略

a[:]          #等价于a[0:] ,:前面是0可以省略

[1,2]+[3,4]    #同extend()

[2]*4             #为 [2,2,2,2]

del l[2]            #删除指定下标的元素

del list[1:3]   #删除指定下标范围的元素

 

list的复制

list1=list2 #list2的别名,对list1操作,即对list2操作

list1=list2[:]  #生成list2的一个copy


#列表的内置方法

# cmp 函数

ist1, list2 = [123, 'xyz'], [456, 'abc']
print cmp(list1, list2) #-1
print cmp(list2, list1) #1
list3 = list2 + [786];
print cmp(list2, list3) #-1
import operator  #Python 3.X 的版本中已经没有 cmp 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象
print operator.eq('hello', 'name')


# len函数

list1, list2 = [123, 'xyz', 'zara'], [456, 'abc']
print "First list length : ", len(list1)  #First list length :  3
print "Second list length : ", len(list2) #Second list length :  2



# min max 函数

list1, list2 = [123, 'xyz', 'zara', 'abc'], [456, 700, 200]
print "Max value element : ", max(list1) #Max value element :  zara
print "Max value element : ", max(list2) #Max value element :  700
print "min value element : ", min(list1)  #min value element :  123
print "min value element : ", min(list2)  #min value element :  200



# list 函数  用于将元组转换为列表

aTuple = (123, 'xyz', 'zara', 'abc');
aList = list(aTuple)
print "列表元素 : ", aList  #列表元素 :  [123, 'xyz', 'zara', 'abc']



列表的方法

help(list.append)

增加:

insert    L.insert(index, object) -- insert object before index 用于将指定对象插入列表的指定位置。

aList = [123, 'xyz', 'zara', 'abc']
aList.insert( 3, 2009)
print "Final List : ", aList #Final List :  [123, 'xyz', 'zara', 2009, 'abc']


append      L.append(object) -- append object to end   追加元素

aList = [123, 'xyz', 'zara', 'abc']
aList.append(2009)
print "Updated List : ", aList #Updated List :  [123, 'xyz', 'zara', 'abc', 2009]


extend   L.extend(iterable) -- extend list by appending elements from the iterable 追加list 用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

aList = [123, 'xyz', 'zara', 'abc', 123];
bList = [2009, 'manni'];
aList.extend(bList)
aList.extend('python')
print "Extended List : ", aList #Extended List :  [123, 'xyz', 'zara', 'abc', 123, 2009, 'manni', 'p', 'y', 't', 'h', 'o', 'n']


删除

remove 删除第一次出现的元素,该方法没有返回值但是会移除列表中的某个值的第一个匹配项

    L.remove(value) -- remove first occurrence of value

    Raises ValueError if the value is not present.

aList = [123, 'xyz', 'zara', 'abc', 'xyz'];
aList.remove('xyz');
print "List : ", aList; #List :  [123, 'zara', 'abc', 'xyz']
aList.remove('abc');
print "List : ", aList; #List :  [123, 'zara', 'xyz']


pop 用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

    L.pop([index]) -> item -- remove and return item at index (default last). 返回最后一个元素,并删除

    Raises IndexError if list is empty or index is out of range.


list1 = ['Google', 'Runoob', 'Taobao']
list_pop=list1.pop(1)
print "删除的项为 :", list_pop #删除的项为 : Runoob
print "列表现在为 : ", list1 #列表现在为 :  ['Google', 'Taobao']

  

查找:


index  返回元素的位置,无则抛异常

  L.index(value, [start, [stop]]) -> integer -- return first index of value.

  Raises ValueError if the value is not present.

aList = [123, 'xyz', 'zara', 'abc']
print "Index for xyz : ", aList.index( 'xyz' ) #Index for xyz :  1
print "Index for zara : ", aList.index( 'zara' ) #Index for zara :  2

   


count  L.count(value) -> integer -- return number of occurrences of value  统计元素在列表中出现的个数,如果没有就是0

aList = [123, 'xyz', 'zara', 'abc', 123];
print "Count for 123 : ", aList.count(123); #Count for 123 :  2
print "Count for zara : ", aList.count('zara'); #Count for zara :  0


修改:

reverse   反向列表中元素

   L.reverse() -- reverse *IN PLACE*  倒序

aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.reverse()
print "List : ", aList; #List :  ['xyz', 'abc', 'zara', 'xyz', 123]

            


sort  用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。

    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

    cmp(x, y) -> -1, 0, 1

aList = [123, 'xyz', 'zara', 'abc', 'xyz']
aList.sort()
print "List : ", aList  #List :  [123, 'abc', 'xyz', 'xyz', 'zara']






元组:

创建空元组


tup1 = ()

元组中只包含一个元素时,需要在元素后面添加逗号

tup1 = (50,)


访问元组

tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
 
print "tup1[0]: ", tup1[0]        #tup1[0]:  physics
print "tup2[1:5]: ", tup2[1:5]    #tup2[1:5]:  (2, 3, 4, 5)


修改元组

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:


tup1 = (12, 34.56);
tup2 = ('abc', 'xyz');


# 以下修改元组元素操作是非法的。

# tup1[0] = 100;


# 创建一个新的元组

tup3 = tup1 + tup2;
print tup3; #(12, 34.56, 'abc', 'xyz')


删除元组

元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,如下实例:


tup = ('physics', 'chemistry', 1997, 2000);
print tup; #('physics', 'chemistry', 1997, 2000)
del tup;
print "After deleting tup : "
print tup; #NameError: name 'tup' is not defined


元组运算符

len((1, 2, 3))3
(1, 2, 3) + (4, 5, 6)(1, 2, 3, 4, 5, 6)
('Hi!',) * 4('Hi!', 'Hi!', 'Hi!', 'Hi!')
3 in (1, 2, 3)True
for x in (1, 2, 3): print x


元组索引,截取

因为元组也是一个序列,所以我们可以访问元组中的指定位置的元素,也可以截取索引中的一段元素,如下所示:

元组:


L = ('spam', 'Spam', 'SPAM!')
L[2] #'SPAM!'
L[-2] #'Spam'
L[1:] #('Spam', 'SPAM!')


无关闭分隔符,任意无符号的对象,以逗号隔开,默认为元组,如下实例:

print 'abc', -4.24e93, 18+6.6j, 'xyz';   #abc -4.24e+93 (18+6.6j) xyz
x, y = 1, 2;
print "Value of x , y : ", x,y; #Value of x , y : 1 2


元组内置函数


cmp(tuple1, tuple2)

tuple1, tuple2 = (123, 'xyz'), (456, 'abc')
print cmp(tuple1, tuple2)   # -1
print cmp(tuple2, tuple1) #1
tuple3 = tuple2 + (786,) 
print cmp(tuple2, tuple3) #-1
tuple4 = (123, 'xyz')
print cmp(tuple1, tuple4)  #0



len(tuple) max(tuple) min(tuple)


tuple1, tuple2 = (123, 'xyz', 'zara', 'abc'), (456, 700, 200)
print "First tuple length : ", len(tuple1); #First tuple length :  4
print "Second tuple length : ", len(tuple2); # Second tuple length :  3
print "min value element : ", min(tuple1); #min value element :  123
print "min value element : ", min(tuple2); #min value element :  200
print "Max value element : ", max(tuple1); #Max value element :  zara
print "Max value element : ", max(tuple2); #Max value element :  700


tuple(seq) 将列表转换为元组。


print tuple([1,2,3,4])
print tuple({1:2,3:4})    #针对字典 会返回字典的key组成的tuple (1, 3)
print tuple((1,2,3,4))    #元组会返回元组自身


元组的方法:

 count      T.count(value) -> integer -- return number of occurrences of value

aTuple = (123, 'xyz', 'zara', 'abc', 123);
print "Count for 123 : ", aTuple.count(123); #Count for 123 :  2
print "Count for zara : ", aTuple.count('zara'); #Count for zara :  1


index

          T.index(value, [start, [stop]]) -> integer -- return first index of value.

          Raises ValueError if the value is not present.

bTuple = (123, 'xyz', 'zara', 'abc')
print "Index for xyz : ", bTuple.index( 'xyz' ) #Index for xyz :  1
print "Index for zara : ", bTuple.index( 'zara' ) #Index for zara :  2



字典


访问字典里的值

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
 
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}  
print "dict['Name']: ", dict['Name'] ## dict['Name']:  Zara
print "dict['Age']: ", dict['Age'] #dict['Age']:  7
print "dict['Alice']: ", dict['Alice']  #KeyError: 'Alice'


修改字典

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
 
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
dict['Age'] = 8; # update existing entry
dict['School'] = "DPS School"; # Add new entry
 
 
print "dict['Age']: ", dict['Age']; #dict['Age']:  8
print "dict['School']: ", dict['School']; #dict['School']:  DPS School


删除字典元素

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
 
del dict['Name'] # 删除键是'Name'的条目
dict.clear()     # 清空词典所有条目
del dict        # 删除词典
 
print "dict['Age']: ", dict['Age']       #TypeError: 'type' object has no attribute '__getitem__'
print "dict['School']: ", dict['School']  #TypeError: 'type' object has no attribute '__getitem__'



字典键的特性

1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
print "dict['Name']: ", dict['Name'] #dict['Name']:  Manni



2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行,如下实例:

dict = {['Name']: 'Zara', 'Age': 7};
 
print "dict['Name']: ", dict['Name']; #TypeError: unhashable type: 'list'


字典内置函数

cmp()函数    优先级为元素个数,键大小,值大小

dict1 = {'Name': 'Zara', 'Age': 7};
dict2 = {'Name': 'Mahnaz', 'Age': 27};
dict3 = {'Name': 'Abid', 'Age': 27};
dict4 = {'Name': 'Zara', 'Age': 7};
print "Return Value : %d" %  cmp (dict1, dict2) #Return Value : -1
print "Return Value : %d" %  cmp (dict2, dict3) #Return Value : 1
print "Return Value : %d" %  cmp (dict1, dict4) #Return Value : 0


len()函数

dict = {'Name': 'Zara', 'Age': 7};
print "Length : %d" % len (dict) #Length : 2


str()函数

dict = {'Name': 'Zara', 'Age': 7};
print "Equivalent String : %s" % str (dict) #Equivalent String : {'Age': 7, 'Name': 'Zara'}


type()函数

dict = {'Name': 'Zara', 'Age': 7};
print "Variable Type : %s" %  type (dict) #Variable Type : <type 'dict'>

增加:


dict.fromkeys()  dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v. v defaults to None.

                                                               创建一个新字典,以序列S中元素做字典的键,v为字典所有键对应的初始值。


seq = ('name', 'age', 'sex')
dict = dict.fromkeys(seq)
print "New Dictionary : %s" %  str(dict) #New Dictionary : {'age': None, 'name': None, 'sex': None}
dict = dict.fromkeys(seq, 10)
print "New Dictionary : %s" %  str(dict) #New Dictionary : {'age': 10, 'name': 10, 'sex': 10}


删除:

dict.clear()  -> D.clear() -> None.  Remove all items from D. 

dict = {'Name': 'Zara', 'Age': 7};
print "Start Len : %d" %  len(dict)     #Start Len : 2
dict.clear()
print "End Len : %d" %  len(dict)       #End Len : 0


dict.pop()    D.pop(k[,d]) -> v, remove specified key and return the corresponding value.  删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。

    If key is not found, d is returned if given, otherwise KeyError is raised


site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'}
pop_obj=site.pop('name','高手教程') #如果key不存在,返回高手教程
print pop_obj   # 输出 :菜鸟教程
print str(site) #{'url': 'www.runoob.com', 'alexa': 10000}


dict.popitem()   随机返回并删除字典中的一对键和值。如果字典已经为空,却调用了此方法,就报出KeyError异常。

      D.popitem() -> (k, v), remove and return some (key, value) pair as a

    2-tuple; but raise KeyError if D is empty. 


site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'}
pop_obj=site.popitem()
print(pop_obj)     #('url', 'www.runoob.com')
print(site)       #{'alexa': 10000, 'name': '\xe8\x8f\x9c\xe9\xb8\x9f\xe6\x95\x99\xe7\xa8\x8b'}


修改:


dict.setdefault()    和get() 方法类似, 如果键不存在于字典中,将会添加键并将值设为默认值。

      D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D

dict = {'runoob': '菜鸟教程', 'google': 'Google 搜索'}
 
print "Value : %s" %  dict.setdefault('runoob', None)    #Value : 菜鸟教程
print "Value : %s" %  dict.setdefault('Taobao', '淘宝')  #Value : 淘宝
print  str(dict)



dict.update()  把字典dict2的键/值对更新到dict里。  有则修改,没有则添加

dict = {'Name': 'Zara', 'Age': 7,'Sex':'male'}
dict2 = {'Sex': 'female' }
dict.update(dict2)
print "Value : %s" %  dict #Value : {'Age': 7, 'Name': 'Zara', 'Sex': 'female'}


dict.copy()  -> D.copy() -> a shallow copy of D   返回一个字典的浅复制

dict1 = {'Name': 'Zara', 'Age': 7}
dict2 = dict1.copy()
print "New Dictinary : %s" %  str(dict2)   #


dict1 =  {'user':'runoob','num':[1,2,3]}
 
dict2 = dict1          # 浅拷贝: 引用对象
dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
 
# 修改 data 数据
dict1['user']='root'
dict1['num'].remove(1)
 
# 输出结果
print(dict1)  #{'num': [2, 3], 'user': 'root'}
print(dict2)  #{'num': [2, 3], 'user': 'root'}
print(dict3)  #{'num': [2, 3], 'user': 'runoob'}


深度复制:

import copy
dict1 =  {'user':'runoob','num':[1,2,3]}
 
dict2 = dict1          # 浅拷贝: 引用对象
dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
dict4 = copy.deepcopy(dict1)  #对象拷贝,深拷贝
# 修改 data 数据
dict1['user']='root'
dict1['num'].remove(1)
 
# 输出结果
print(dict1)  #{'num': [2, 3], 'user': 'root'}
print(dict2)  #{'num': [2, 3], 'user': 'root'}
print(dict3)  #{'num': [2, 3], 'user': 'runoob'}
print(dict4)  #{'num': [1, 2, 3], 'user': 'runoob'}


深度和浅度拷贝同时适合于列表


import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
  
b = a                       #赋值,传对象的引用,赋值引用,a 和 b 都指向同一个对象。
c = copy.copy(a)            #对象拷贝,浅拷贝, 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)
d = copy.deepcopy(a)        #对象拷贝,深拷贝,深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
  
a.append(5)                 #修改对象a
a[4].append('c')            #修改对象a中的['a', 'b']数组对象
  
print 'a = ', a  #a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print 'b = ', b  #b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print 'c = ', c  #c =  [1, 2, 3, 4, ['a', 'b', 'c']]
print 'd = ', d  #d =  [1, 2, 3, 4, ['a', 'b']]


查找:

dict.get()    D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None.    返回指定键的值,如果值不在字典中返回默认值。

dict = {'Name': 'Zara', 'Age': 27}
print "Value : %s" %  dict.get('Age') #Value : 27
print "Value : %s" %  dict.get('Sex', "Never") #Value : Never


 

dict.has_key()  D.has_key(k) -> True if D has a key k, else False 判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。

dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" %  dict.has_key('Age') #Value : True
print "Value : %s" %  dict.has_key('Sex') #Value : False



view的相关方法,返回的是view object,它可以反映出 dictionary 的变化,字典被修改了也能遍历,而其他的遍历方法会报错

dict.viewitems()      D.viewitems() -> a set-like object providing a view on D's items  

dict.viewkeys()      D.viewkeys() -> a set-like object providing a view on D's keys

dict.viewvalues()    D.viewvalues() -> an object providing a view on D's values


dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" %  dict.viewkeys() # Value : dict_keys(['Age', 'Name'])
print "Value : %s" %  dict.viewitems()  #Value : dict_items([('Age', 7), ('Name', 'Zara')])
print "Value : %s" %  dict.viewvalues()  #Value : dict_values([7, 'Zara'])
for value in dict.viewvalues():
    print value   #7  Zara
    
for items in dict.viewitems():
    print items   #('Age', 7)  ('Name', 'Zara')
    
for key in dict.viewkeys():
    print key #Age  Name


dict.items()    D.items() -> list of D's (key, value) pairs, as 2-tuples  以列表返回可遍历的(键, 值) 元组数组

dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
print "字典值 : %s" %  dict.items()  #字典值 : [('Google', 'www.google.com'), ('taobao', 'www.taobao.com'), ('Runoob', 'www.runoob.com')]
 
# 遍历字典列表
for key,values in  dict.items():
    print key,values
'''
Google www.google.com
taobao www.taobao.com
Runoob www.runoob.com
'''


dict.keys()      D.keys() -> list of D's keys    返回一个字典所有的键

dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" %  dict.keys()       #Value : ['Age', 'Name']


dict.values()      D.values() -> list of D's values   以列表返回字典中的所有值。

dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" %  dict.values() #Value : [7, 'Zara']


dict.iteritems()      D.iteritems() -> an iterator over the (key, value) items of D  用法和items()一样,只不过返回的是一个迭代器

dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
  
print type(dict.iteritems()) #<type 'dictionary-itemiterator'>
print type(dict.items()) #<type 'list'>
# 遍历字典列表
for key,values in  dict.iteritems():
    print key,values
'''
Google www.google.com
taobao www.taobao.com
Runoob www.runoob.com
'''

dict.iterkeys()      D.iterkeys() -> an iterator over the keys of D       用法和keys()一样,只不过返回的是一个迭代器

dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" %  dict.iterkeys()       #Value : <dictionary-keyiterator object at 0x00000000025D8E58>
for i in dict.iterkeys():
    print i



dict.itervalues()    D.itervalues() -> an iterator over the values of D   用法和values()一样,只不过返回的是一个迭代器

dict = {'Name': 'Zara', 'Age': 7}
print "Value : %s" %  dict.itervalues() #Value : <dictionary-valueiterator object at 0x0000000002788E58>
for value in dict.itervalues():
    print value


遍历:采用第一种遍历方法即可

for i in name_info:  #循环key,效率高

  print i,name_info[i]

  

  

for i ,k in name_info.items():  #循环key和value,效率低,先要转换成列表

  print i,k