python2中用str表示字節字符串,這種類型如今在Python3中用bytes對象來處理,明確區分字符串與字節html
python3中只有一種可以保存文本信息的數據類型,就是str,它是不可變序列,保存的是Unicode碼位python
bytes以及可變的bytearray與str不一樣,只能用字節做爲序列值,即0<=x<=256範圍內的整數。例如數據結構
>>>print(bytes([102,111,111])) b'foo'
對於bytes和bytearray,在轉換爲另外一種序列類型(如list或tuple)時能夠顯示其原本面目:例如:app
>>>list(b'foo bar') [102,111,111,32,98,97,114] >>>tuple(b'foo bar') (102,111,111,32,98,97,114)
從python3開始,全部沒有前綴的字符串都是Unicode。所以,全部用單引號,雙引號或成組的3個引號包圍且沒有前綴的值都表示str數據類型:函數
>>>type("some string") <class 'str'>
在python2中,Unicode須要有前綴(例如u"some string")。從python3.3開始,爲保證向後兼容,仍然支持這個前綴,但它在python3中沒有任何語法上的意義。性能
字節的明確語法:字節也被單引號,雙引號或三引號包圍,但必須有一個b或B前綴。測試
關於pytho字符串編碼與解碼參考: https://blog.csdn.net/trochiluses/article/details/16825269編碼
python中字符串是不可變的,拼接任意多個字符串時在內存中會產生一個新的序列對象:好比lua
s="" for substring in substrings: s += substring
字符串s經過屢次拼接來建立一個新字符串,可是這中建立方式效率極低。幸虧python爲咱們提供了str.join()方法。它接受一個可迭代字符串爲參數。由於它是一個方法,實際調用時利用空字符串來調用,參數爲須要拼接的迭代字符串spa
s="".join(substrings)
join方法還能夠在須要合併的多個字符串之間插入分隔符
','.join(['a','b','c','d']) 'a,b,c,d'
雖然join方法速度更快,但並非全部須要拼接字符串的狀況下都使用該方法。在下面幾種狀況下,join的性能可能還不如利用加法的普通拼接
python內置集合類型有:列表(list),元組(tuple),字典(dictionary),集合(set)
python中組基本的兩種集合類型list和tuple,他們都是對象序列,列表時動態的,大小可變動,元組是不可變的,一旦建立就沒法修改,所以也是可哈希(hashtable)的,便可做爲字典中的key
列表中的方法操做詳解參考:http://www.javashuo.com/article/p-mnsgbtkw-bs.html
咱們都值都,編寫這樣的代碼時痛苦的
這種方法可能適用與C語言,但在python中的實際運行速度很慢,有如下緣由:
列表推導就是爲了解決這個問題,它使用編排好的功能對上述語句的一部分作了自動化處理:
這種寫法更加高效簡短,也意味着更少的錯誤,更容易閱讀和理解
python習語的另外一個典型例子就是使用enumerate(枚舉)。在循環中使用列表時,這個內置函數能夠很方便的獲取其索引,列如:
它能夠替換爲下面這段更短的代碼:
若是須要一個一個合併多個列表(或任意可迭代對象)中的元素,那麼可使用內置的zip()函數。
注意:對zip函數返回的結果再次調用zip,能夠將其恢復原狀
另一種常見的語法元素是序列解包。這種方法適用與任意序列類型(列表,元組,字符串,字節序列等)。只要賦值運算符左邊的變量和右邊的元素數目相等,你均可以用這種方法將元素序列解包到另外一邊的變量中:
解包還能夠利用帶*的表達式獲取單個變量中的多個元素,只要它的解釋沒有歧義便可。還能夠對嵌套序列進行解包。下面是一些更復雜的解包實例:
帶*的表達是能夠獲取序列剩餘部分
帶*的表達是能夠獲取序列的中間部分
嵌套解包
字典能夠用和前面列表推導相似的推導來建立一個新的字典。如:
重要的是,使用字典推導具備與列表推導相同的優勢,所以字典推導要更加高效,更加簡短,更加簡潔。
字典的keys(),values()和items()3個方法的返回值類型再也不是列表,而且與之對應的iterkeys(),itervluae()和iteritems()原本返回的是迭代器,python3中已經沒有這三個方法。python3中keys(),vlaues()和items()返回的是視圖對象(view objects)
視圖對象能夠動態查看字典的內容,所以每次字典發生變化時,視圖都會相應的變化:
獲取字典長度使用len(len(words)),測試元素是否包含其中使用in子句
在keys和values方法返回的視圖中,鍵和值的順序時徹底對應的。但在python2中,若是你想要保證獲取的鍵和值順序徹底一致,須要在兩次函數調用以前不能修改字典內容
字典的鍵必須時可哈希(hashable)的(可哈希:一個對象有一個整個生命週期值不變的散列值,而且能夠和其餘對象進行比較),python全部不變的類型都是可哈希的,可變類型(列表,字典和集合)是不可哈希的
字典是無序的,可是python標準庫的collections模塊提供了名爲OrderedDict的有序字典
集合是一種很棒的數據結構,它與數學中的集合概念類型,有交集,並集等概念
Python的內置集合類型有兩種:
set():可變的,無序的,有限的集合,其元素是惟一的,不可變的對象,集合中的元素必須是可哈希的
frozenset():不可變的,可哈希的,無序的集合,其元素是惟一的,不可變的對象,在一個set()或frozenset()中不能包含另外一個普通的可變set(),會拋異常TypeError
下面這種集合初始化的方法是徹底正確的:
建立可變集合有三種方法:
注意:空的集合對象是沒有字面值的。空的花括號{}表示的是空的字典字面值