python基礎學習(一)---數據結構和流程

1. Python數據結構

1.1 整數和浮點數

python的整數和浮點數與其他語言在表達和寫法沒有區別,使用1-10800等直接表示,也使用0x開頭表示十六進制數據,如0x9090
浮點數的寫法可以使用簡單數學寫法,如1.323-9.21。對於很大或很小的數,要使用科學計數法,如1.23x10^9,可以寫爲1.23e9。要注意到,整數的計算都是精確地,無論是乘法還是除法,但是浮點數本身是有精度的,所以浮點數的計算會對計算結果四捨五入到指定精度內。
python中空值使用None表達,和C中的NULL是一樣的意思。
python的bool值也是True和False兩種,可以使用and、or和not等邏輯運算符進行運算。

1.2 字符串和編碼

python的字符串與其他低級或高級語言一致,採用‘’或“”括起來,使用\表示轉義。一般python默認使用UTF-8編碼,但爲了進一步同一編碼,並避免因爲編輯器的原因導致編碼混亂,需要在文件開頭就指定編碼格式:

# -*- encoding:UTF-8 -*-

python提供了很多工具來進行編碼的轉換和表示,對於單個字符,使用ord獲得對應字符的編碼,通過chr獲得對應編碼的字符表示。

>>> ord("A")
65
>>> chr(65)
'A'

也可以使用encode函數對字符串的編碼格式進行強制轉換,前面加入b,表示該字符串類型是byte,是最原始的以字節表示的字符串類型。

>>> '中華'.encode('utf-8')
b'\xe4\xb8\xad\xe5\x8d\x8e'
>>> 'china'.encode('ascii')
b'china'

可以通過len獲取str的長度,單位是byte,但是如果不是使用utf-8編碼的中文,獲取時長度不一致。

>>> len('所以')
2
>>> len('所以'.encode('utf-8'))
6

因此,在編寫含有中文的python代碼時,務必保證使用統一的utf-8編碼。

1.3 list和tuple

list列表

list列表表示一組有序的數據的集合,其使用和表達與數組基本很類似,但是有兩點不同,首先在使用list索引時,不僅可以正序索引,還可以倒序索引,最後一個元素的index是-1。其次,list的元素可以是不同類型的數據,這一點在數組中是不允許的。在使用範圍索引時,使用左閉右開區間表示,例如[1:3]表示1和2,不包含3.索引冒號的左側值必須小於右側值,其中,-1表示list最後一個值的索引,是最大的值。

>>> week=['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
>>> week[0]
'Mon'
>>> week[1]
'Tues'
>>> week[-1]
'Sun'
>>> week[-1:1]
[]
>>> week[-1:2]
[]
>>> week[1:-1]
['Tues', 'Wed', 'Thur', 'Fri', 'Sat']
>>> week[1:2]
['Tues']
>>> week[-3:-1]
['Fri', 'Sat']

對list的操作可以通過一系列函數實現,如append,insert,pop,也可以直接對元素內容進行賦值操作。

>>> week.append('888')
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', '888']
>>> week.insert(-1, '666')
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', '666', '888']
>>> week.pop()
'888'
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun', '666']
>>> week.pop(-1)
'666'
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'Sun']
>>> week[-1] = 'what'
>>> week
['Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat', 'what']

list中元素的數據類型可以不一致,可以爲整數、字符串,甚至是另一個list。list中包含另一個list的情況可以組成一個二維數組,同樣的也可以組成三維、四維數組。

>>> workday=['Mon', 'Tues', 'Wed', 'Thur', 'Fri']
>>> weekend=['Sat', 'Sun']
>>> 
>>> weekday=[workday,weekend]
>>> weekday
[['Mon', 'Tues', 'Wed', 'Thur', 'Fri'], ['Sat', 'Sun']]
>>> weekday[0][-1]
'Fri'
>>> weekday[1][-1]
'Sun'

tuple元組

tuple也是一種有序的數據集合,但是tuple一旦初始化之後,就不能修改了。tuple使用兩個小括號()包含數據,其元素的數據類型可以不一致,可以包含整型、字符串、list和其他tuple。
在定義時,如果只有一個元素,需要在元素後面加“,”來避免歧義,

>>> tup=(1)
>>> tup
1
>>> tup=(1,)
>>> tup
(1,)

雖然元組初始化之後無法修改,但是這個無法修改指的是元素指向無法修改,可以通過在元組中使用list,來實現內容可變的元組,這一概念類似C中的const *和*const。

>>> tup
(1, 2, [3, 4])
>>> tup[2][0]=5
>>> tup[2][1]=6
>>> tup
(1, 2, [5, 6])

1.4 dict字典

python內置了dict數據類型,在別的語言中也叫map或key-value鍵值對。dict使用{}包含數據部分,其元素是一個key-value鍵值對,key需要使用不可變對象,這是因爲dict通過hash算法來通過key計算得到value的地址,key值的微小改變,都會導致hash計算結果的巨大變化。但同樣是因爲使用hash算法來進行索引,所以索引的計算量隨dict尺寸增加並不會由顯著變化,大大提高了索引的效率,但是消耗了比較多的內存空間。這一點和list剛好相反。

>>> week={"Mon":11, 'Tues':22, 'Wed':33}
>>> week
{'Wed': 33, 'Mon': 11, 'Tues': 22}
>>> week['Mon']
11
>>> 'Mon'in week
True
>>> week.pop('Wed')
33
>>> week.get('Mon')
11

1.5 set集

set是一組key的集合,不儲存value,且key不能重複且是無序的,這就是數學上集合的無序不重複的集合的概念,因此可以使用set進行集合的並集與或集運算。
set初始化時需要使用list作爲輸入,可以使用add添加key,也可以使用remove移除key,使用&進行並集操作,使用|進行或集操作。

>>> ll=[1,2,3]
>>> myset=set(ll)
>>> myset
{1, 2, 3}
>>> myset.add(4)
>>> myset
{1, 2, 3, 4}
>>> myset.add(4)
>>> myset
{1, 2, 3, 4}
>>> myset.remove(2)
>>> myset
{1, 3, 4}
>>> set2 = set([2,4,5])
>>> myset & set2
{4}
>>> myset | set2
{1, 2, 3, 4, 5}

set的key也不能放入可變對象,因爲set的元素不允許重複,如果放入可變對象就無法判斷set中的元素是否重複。因此,set無法放入list,會爆出錯誤unhashable type:list

>>> myset.add(ll)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

2. Python語句

2.1 條件判斷語句

python的條件判斷語句邏輯和其他語言一致,但是使用換行作爲語句的分割點,而不是{},判斷條件後加冒號(:)作爲後續操作的開始。

if t == 1:
    print("get")
else:
    print("no")

2.2 循環語句

python常用的循環語句由while和for,用法上除了使用:結束條件判斷以及使用縮減來表示代碼邏輯塊之外,在邏輯上和其他語言一致。

s = 0
num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in num:
    s = s + i
print("get %d" % s)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章