eval(str)函數很強大,官方解釋為:將字符串str當成有效的表達式來求值並返回計算結果。所以,結合math當成一個計算器很好用。
eval()函數常見作用有:
1、計算字符串中有效的表達式,並返回結果
>>> eval('pow(2,2)') 4 >>> eval('2 + 2') 4 >>> eval("n + 4") 85
2、將字符串轉成相應的對象(如list、tuple、dict和string之間的轉換)
>>> a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]" >>> b = eval(a) >>> b [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]] >>> a = "{1:'xx',2:'yy'}" >>> c = eval(a) >>> c {1: 'xx', 2: 'yy'} >>> a = "(1,2,3,4)" >>> d = eval(a) >>> d (1, 2, 3, 4)
3、將利用反引號轉換的字符串再反轉回對象
>>> list1 = [1,2,3,4,5] >>> `list1` '[1, 2, 3, 4, 5]' >>> type(`list1`) <type 'str'> >>> type(eval(`list1`)) <type 'list'> >>> a = eval(`list1`) >>> a [1, 2, 3, 4, 5]
map()函數接收兩個參數,一個是函數,一個是序列,map將傳入的函數依次作用到序列的每個元素,並把結果作為新的list返回。
舉例說明,比如我們有一個函數f(x)=x%2,要把這個函數作用在一個list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()實現
#使用lambda函數
>>> print map(lambda x: x % 2, range(7))
[0, 1, 0, 1, 0, 1, 0]
一個最簡單的例子,如基於f(x) = x²,map()作用於list [1, 2, 3, 4, 5, 6, 7, 8, 9]后的結果如下:返回結果仍為list
以前使用zip
,只用過最簡單的,合並兩個列表,沒有仔細深究過,后來在實驗樓 做實驗的時候,遇到了這樣的一行代碼:
[list(row) for row in zip(*field)] #field 是一個矩陣
zip()的基本使用方法
首先看help(zip)
:
Help on built-in function zip in module __builtin__: zip(...) zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)] Return a list of tuples, where each tuple contains the i-th element from each of the argument sequences. The returned list is truncated in length to the length of the shortest argument sequence. None
大意就是:
定義:zip([seql, …])接受一系列可迭代對象作為參數,將對象中對應的元素打包成一個個tuple(元組),然后返回由這些tuples組成的list(列表)。若傳入參數的長度不等,則返回list的長度和參數中長度最短的對象相同。
通俗點就是把幾個列表(0或者1或者多個)的對應位置的元素組成新的tuple
, 這些新的tuple
構成一個list
.
直接用幾個例子來說明:
示例
x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] xyz = zip(x, y, z) print xyz '''結果是:''' [(1, 4, 7), (2, 5, 8), (3, 6, 9)] #對應元素組成一個新的元組,元組構成列表 #---------------------------------------# #無參數時, x = zip() print x #結果是: [] #---------------------------------------# #長度不等時,取長度的最小的 x = [1, 2, 3] y = ['a', 'b', 'c', 'd'] xy = zip(x, y) print xy #結果是: [(1, 'a'), (2, 'b'), (3, 'c')]
常用的方法
#可變參數傳遞的使用(很常用一種用法),這個可以用矩陣的轉置o~如下:實驗 #樓的那代碼就是轉置矩陣 x = [[1,2,3], [4,5,6], [7,8,9]] y = zip(*x) print y #結果是: [(1, 4, 7), (2, 5, 8), (3, 6, 9)] #轉置就是:
map(list, y) #這種也經常這樣使用: 壓縮與解壓縮 x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] xyz = zip(x, y, z) res = zip(*xyz) print res #結果可想而知, 壓縮之后 在解壓縮: [(1, 2, 3), (4, 5, 6), (7, 8, 9)] '''''' #還有就是字典的構造也經常使用: x = ['a', 'b', 'c'] y = ['x', 'y', 'z'] z = zip(x, y) d = dict(z) print d #結果為: {'a': 'x', 'c': 'z', 'b': 'y'} '''''' #------------------------------# #與iter合用: a = [1, 2, 3, 4, 5, 6] b = zip(*([iter(a)] * 2)) print b #結果是: [(1, 2), (3, 4), (5, 6)]