《轉》python 9 字典,numpy


 http://www.cnblogs.com/BeginMan/p/3156960.html

一、映射類型

我理解中的映射類型是:鍵值對的關系,鍵(key)映射值(value),且它們是一對多的關系。
字典是Python唯一的映射類型。

擴展1:哈希表
一種數據結構,值是根據相關的鍵進行數據存儲的,形成"鍵-值對"(key-value pairs),哈希表中的值是沒有順序的。

擴展2:映射類型與序列類型的區別

1):訪問方式不同,序列類型用數字類型的鍵,而映射類型可以用其他對象類型做鍵(一般式字符串)

復制代碼
>>> lis = ['a','b','c']
>>> lis[2]
'c'
>>> dic = {'name':'a','father':'b','mother':'c'}
>>> dic['mother']
'c'
復制代碼

2):存儲類型不同,映射類型的鍵,直接或間接地與值相關。
3):序列類型,有序之列;映射類型則無序之列

二、字典

1、工廠方法dict():

復制代碼
>>> tu=(['a','b'],['xx','yy'])
>>> tu
(['a', 'b'], ['xx', 'yy'])
>>> fdict = dict(tu)
>>> fdict
{'a': 'b', 'xx': 'yy'}
復制代碼

2、訪問形式:

復制代碼
>>> dic
{'father': 'b', 'name': 'a', 'mother': 'c'}
>>> for obj in dic:
      print obj

father
name
mother
>>> for obj in dic.keys():
      print obj

    
father
name
mother
>>> for obj in dic.values():
      print obj

    
b
a
c
>>> for obj in dic.items():
      print obj

    
('father', 'b')
('name', 'a')
('mother', 'c')
>>> 
復制代碼

3、has_key()、in、not in來檢查是否有某個鍵,has_key()已慢慢棄用了。

4、有則更新,無則添

5、刪除

del dic['name']   #刪除元素
del dic #刪除整個

6、操作符
[]、和 in、not in

>>> if 'name' in dic:
      print dic['name']
a

7、相關函數
dict():創建字典
len():返回鍵值對數目
hash(obj):返回obj的哈希值

8、內建方法
dict.clear():刪除字典中所有元素
dict.copy():淺copy
dict.formkeys():創建字典
dict.get(key,default=None):返回對應鍵值
dict.has_key():鍵是否存在
dict.items():返回字典中鍵值對元祖的列表
dict.keys():鍵的列表dict.values():值的列表
......

復制代碼
>>> dic.keys()
['father', 'name', 'mother']
>>> dic.values()
['b', 'a', 'c']
>>> dic.get('name')
'a'
復制代碼

 三、注意

1、不允許一個鍵對應多個值,一個鍵只能對應一項
2、當鍵發生沖突時,取最后一個。
3、Python不會檢查鍵的沖突,也不會因為鍵的沖突而產生錯誤,如果檢查每個鍵是否沖突勢必會占用很多內存。

>>> dic={'a':'ss','a':"xxxx"}
>>> dic
{'a': 'xxxx'}

4、鍵必須是可哈希的。
所有不可變類型都是可哈希的,不可變類型如(列表、字典)則不能。
不可變類型:string,integer,tuple、
可變類型:list,dict

5、值相同的數字表示相同的鍵,如1和1.0的哈希值是相同的,因此它們是相同的鍵。

>>> dic={1:'a',1.0:'b'}
>>> dic
{1: 'b'}

(1)字典

字典是一種映射關系:鍵(key),值(value),key-value對

創建字典的方式:直接創建和利用dict函數創建

>>> aInfo = {'Wangdachui': 3000, 'Niuyun':2000, 'Linling':4500, 'Tianqi':8000}
>>> info = [('Wangdachui',3000), ('Niuyun',2000), ('Linling',4500), ('Tianqi',8000)]
>>> bInfo = dict(info)
>>> cInfo = dict([['Wangdachui',3000], ['Niuyun',2000], ['Linling',4500], ['Tianqi',8000]])
>>> dInfo = dict(Wangdachui=3000, Niuyun=2000, Linling=4500, Tianqi=8000)
復制代碼
>>> aDict = {}.fromkeys(('Wangdachui', 'Niuyun', 'Linling', 'Tianqi'),3000)
>>> aDict
{'Tianqi': 3000, 'Wangdachui': 3000, 'Niuyun': 3000, 'Linling': 3000}
>>> sorted(aDict)
['Linling', 'Niuyun', 'Tianqi', 'Wangdachui']


>>>names = ['Wangdachui', 'Niuyun', 'Linling', 'Tianqi']
>>>salaries = [3000, 2000, 4500, 8000]
>>>print(dict(zip(names,salaries)))
{'Niuyun': 2000, 'Linling': 4500, 'Tianqi': 8000, 'Wangdachui': 3000}
復制代碼

字典的基本操作:增刪改查

復制代碼
>>> aInfo = {'Wangdachui': 3000, 'Niuyun':2000, 'Linling':4500, 'Tianqi':8000}
>>> aInfo['Niuyun']    #鍵值查找
5000
>>> aInfo['Niuyun'] = 9999          #更新
>>> aInfo
{'Tianqi': 8000, 'Wangdachui': 3000, 'Linling': 4500, 'Niuyun': 9999}
>>> aInfo['Fuyun'] = 1000      #添加
>>> aInfo
{'Tianqi': 8000, 'Fuyun': 1000, 'Wangdachui': 3000, 'Linling': 4500, 'Niuyun': 9999}
>>> 'Mayun' in aInfo        #成員判斷
False
>>> del aInfo       #刪除字典
>>> aInfo
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'aInfo' is not defined
復制代碼

字典的格式化字符串:

復制代碼
>>> aInfo = {'Wangdachui': 3000, 'Niuyun':2000, 'Linling':4500, 'Tianqi':8000}
>>> for key in aInfo.keys():
print 'name=%s, salary=%s' % (key, aInfo[key])      #  %(key)格式說明符 % 字典對象名>>> "Niuyun's salary is %(Niuyun)s." % aInfo
"Niuyun's salary is 5000."
復制代碼

輸出模板的作用

復制代碼
>>> aInfo = {'Wangdachui': 3000, 'Niuyun':2000, 'Linling':4500, 'Tianqi':8000}
>>> template = '''
Welcome to the pay wall.
Niuyun's salary is %(Niuyun)s.
Wangdachui's salary is %(Wangdachui)s.
'''
>>> print template % aInfo
Welcome to the pay wall. Niuyun's salary is 2000. Wangdachui's salary is 3000.
復制代碼

字典的方法

clear() fromkeys()
get() has_key ()
items() pop()
setdefault() update()
values() copy()

(2)集合:無序不重復的元素的集合

可變集合:set

>>> names = ['Wangdachui', 'Niuyun', 'Wangzi', 'Wangdachui', 'Linling', 'Niuyun']
>>> namesSet = set(names)
>>> namesSet

{'Wangzi', 'Niuyun', 'Wangdachui', 'Linling'

不可變集合:frozenset

復制代碼
aSet = set('hello')
print(aSet)
fSet = frozenset('hello')
print(fSet)

{'e', 'l', 'h', 'o'}
frozenset({'e', 'l', 'h', 'o'})
復制代碼

集合比較和關系運算符和集合操作

 

(3)python常用的數據結構

ndarray(N維數組)
Series(變長字典)
DataFrame(數據框)

復制代碼
import numpy as np
xArray = np.ones((3,4))
print(xArray)

[[ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]]
復制代碼

 

ndarray:

NumPy中基本的數據結構
別名為array
利於節省內存和提高CPU計算時間
有豐富的函數

ndarray的創建和輸出

復制代碼
>>> from numpy import *
>>> aArray = array([1,2,3])
>>> aArray
array([1, 2, 3])
>>> bArray = array([(1,2,3),(4,5,6)])
>>> bArray
array([[1, 2, 3],
[4, 5, 6]])
>>> zeros((2,2))
array([[ 0., 0.],
[ 0., 0.]])
>>> arange(1,5,0.5)
array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
復制代碼

ndarray的基本運算符

復制代碼
>>> aArray = array([(5,5,5),(5,5,5)])
>>> bArray = array([(2,2,2),(2,2,2)])
>>> cArray = aArray * bArray
>>> cArray
array([[10, 10, 10],
[10, 10, 10]])
>>> aArray += bArray
>>> aArray
array([[7, 7, 7],
[7, 7, 7]])
>>> aArray > 5
array([[ True, True, True],
[True, True, True]], dtype=bool)
復制代碼

ndarray的屬性和方法

復制代碼
>>> aArray = array([(1,2,3),(4,5,6)])
>>> aArray.shape
(2, 3)
>>> bArray = aArray.reshape(3,2)
>>> bArray
array([[1, 2],
[3, 4],
[5, 6]])
>>> aArray.sum()
21
>>> aArray.sum(axis = 0)
array([5, 7, 9])
>>> aArray.sum(axis = 1)
array([ 6, 15])

>>> aArray = array([1,3,7])
>>> bArray = array([3,5,8])
>>> cArray = array([9,8,7])
>>> aArray[1:]
array([3, 7])
>>> where(aArray>2, bArray, cArray)
array([9, 5, 8]
復制代碼

 ndarray的內建函數

復制代碼
>>> def fun(x,y):
return (x+1)*(y+1)
>>> arr = fromfunction(fun,(9,9))
>>> arr
array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9.], [ 2., 4., 6., 8., 10., 12., 14., 16., 18.], [ 3., 6., 9., 12., 15., 18., 21., 24., 27.], [ 4., 8., 12., 16., 20., 24., 28., 32., 36.], [ 5., 10., 15., 20., 25., 30., 35., 40., 45.], [ 6., 12., 18., 24., 30., 36., 42., 48., 54.], [ 7., 14., 21., 28., 35., 42., 49., 56., 63.], [ 8., 16., 24., 32., 40., 48., 56., 64., 72.], [ 9., 18., 27., 36., 45., 54., 63., 72., 81.]])
復制代碼

ndarray的ufunc函數

 

復制代碼
import numpy as np
>>> a = np.arange(1,5)
>>> a
array([1, 2, 3, 4])
>>> b = np.arange(2,6)
>>> b
array([2, 3, 4, 5])
>>> np.add(a,b)
array([3, 5, 7, 9])
>>> np.add.accumulate([2, 3, 8])
array([ 2, 5, 13])
>>> np.multiply.accumulate([2, 3, 8])
array([ 2, 6, 48])
Source
help(ufunc)
help(numpy)
add = <ufunc 'add'>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM