-
Python內置的一種數據類型是列表:
list
。list是一種有序的集合,可以隨時添加和刪除其中的元素。比如,列出班里所有同學的名字,就可以用一個list表示:
>>>?['Michael',?'Bob',?'Tracy'] ['Michael',?'Bob',?'Tracy']
list是數學意義上的有序集合,也就是說,list中的元素是按照順序排列的。
構造list非常簡單,按照上面的代碼,直接用
?[ ]?
把list的所有元素都括起來,就是一個list對象。通常,我們會把list賦值給一個變量,這樣,就可以通過變量來引用list:>>>?classmates?=?['Michael',?'Bob',?'Tracy'] >>>?classmates?#?打印classmates變量的內容 ['Michael',?'Bob',?'Tracy']
由于Python是動態語言,所以list中包含的元素并不要求都必須是同一種數據類型,我們完全可以在list中包含各種數據:
>>>?L?=?['Michael',?100,?True]
一個元素也沒有的list,就是空list:
>>>?empty_list?=?[]
查看全部 -
在Python中,布爾類型還可以與其他數據類型做 and、or和not運算,請看下面的代碼:
a?=?True print?a?and?'a=T'?or?'a=F'
計算結果不是布爾類型,而是字符串 'a=T',這是為什么呢?
因為Python把
0
、空字符串''
和None
看成?False,其他數值和非空字符串都看成?True,所以:True?and?'a=T'?計算結果是?'a=T' 繼續計算?'a=T'?or?'a=F'?計算結果還是?'a=T'
要解釋上述結果,又涉及到 and 和 or 運算的一條重要法則:短路計算。
查看全部 -
要解釋上述結果,又涉及到 and 和 or 運算的一條重要法則:短路計算。
1.?在計算
?a and b?
時,如果 a 是 False,則根據與運算法則,整個結果必定為 False,因此返回 a;如果 a 是 True,則整個計算結果必定取決與 b,因此返回 b。2. 在計算
?a or b?
時,如果 a 是 True,則根據或運算法則,整個計算結果必定為 True,因此返回 a;如果 a 是 False,則整個計算結果必定取決于 b,因此返回 b。所以Python解釋器在做布爾運算時,只要能提前確定計算結果,它就不會往后算了,直接返回結果。
查看全部 -
for x in [1,2,3,4,5,6,7,8,9]: for y in [0,1,2,3,4,5,6,7,8,9]: if (x < y): print(x*10+y)查看全部
-
寫列表生成式時,把要生成的元素 x * x 放到前面,后面跟 for 循環,就可以把list創建出來,
列表生成式則可以用一行語句代替循環生成上面的list:
>>>?[x?*?x?for?x?in?range(1,?11)] [1,?4,?9,?16,?25,?36,?49,?64,?81,?100]
查看全部 -
items() 方法把dict對象轉換成了包含tuple的list,我們對這個list進行迭代,可以同時獲得key和value:
查看全部 -
和 values() 有一個 itervalues() 類似,?items()?也有一個對應的?iteritems(),iteritems() 不把dict轉換成list,而是在迭代過程中不斷給出 tuple,所以, iteritems() 不占用額外的內存。
查看全部 -
請輸入筆記內容那這兩個方法有何不同之處呢? 1. values() 方法實際上把一個 dict 轉換成了包含 value 的list。 2. 但是 itervalues() 方法不會轉換,它會在迭代過程中依次從 dict 中取出 value,所以 itervalues() 方法比 values() 方法節省了生成 list 所需的內存。 3. 打印 itervalues() 發現它返回一個對象,這說明在Python中,for 循環可作用的迭代對象遠不止 list,tuple,str,unicode,dict等,任何可迭代對象都可以作用于for循環,而內部如何迭代我們通常并不用關心。 如果一個對象說自己可迭代,那我們就直接用 for 循環去迭代它,可見,迭代是一種抽象的數據操作,它不對迭代對象內部的數據有任何要求。...
查看全部 -
enumerate() 函數把:
['Adam',?'Lisa',?'Bart',?'Paul']
變成了類似:
[(0,?'Adam'),?(1,?'Lisa'),?(2,?'Bart'),?(3,?'Paul')]
因此,迭代的每一個元素實際上是一個tuple:
for?t?in?enumerate(L): ????index?=?t[0] ????name?=?t[1] ????print?index,?'-',?name
如果我們知道每個tuple元素都包含兩個元素,for循環又可以進一步簡寫為:
for?index,?name?in?enumerate(L): ????print?index,?'-',?name
這樣不但代碼更簡單,而且還少了兩條賦值語句。
查看全部 -
注意:?集合是指包含一組元素的數據結構,我們已經介紹的包括: 1.?有序集合:list,tuple,str和unicode; 2.?無序集合:set 3.?無序集合并且具有?key-value?對:dict
查看全部 -
請編寫接受可變參數的 average() 函數。
可變參數 args 是一個tuple,當0個參數傳入時,args是一個空tuple。
查看全部 -
可變參數的名字前面有個?*?號,我們可以傳入0個、1個或多個參數給可變參數
Python解釋器會把傳入的一組參數組裝成一個tuple傳遞給可變參數,因此,在函數內部,直接把變量?args?看成一個?tuple?就好了。
查看全部 -
由于函數的參數按從左到右的順序匹配,所以默認參數只能定義在必需參數的后面:
查看全部 -
如果一個函數在內部調用自身本身,這個函數就是遞歸函數。
遞歸函數的優點是定義簡單,邏輯清晰。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰。
使用遞歸函數需要注意防止棧溢出。
查看全部 -
# math包提供了sin()和?cos()函數,我們先用import引用它:Python函數返回的仍然是單一值:用print打印返回結果,原來返回值是一個tuple!但是,在語法上,返回一個tuple可以省略括號,而多個變量可以同時接收一個tuple,按位置賦給對應的值,所以,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。
查看全部
舉報