一起學Python——資料型別詳解
和學習其他程式語言一樣,首先要了解一門語言的資料型別。
Python的資料型別有整型、浮點型、字串、布林型、日期時間型別、list列表、set集合、tuple元組、dict詞典等。
1、整型
就是數學中的整數,包括負整數。
定義整型的方法:
a = 100
b = -100
print(a)
print(b)
結果:
100
-100
Python定義變數的語法和其他的程式語言不一樣,例如Java定義整型變數的語法:int a = 10;
Python是根據你的變數的值來確定變數的型別。
a = 12就是整型,a = "abc"就是字串。
2、浮點型
就是數學中的小數。例如:
a = 12.3 print(a)
變數a為浮點型。如果浮點變數的值很多或者很小,則建議用科學計數法定義一個浮點變數。例如:
a = 3.14e9
print(a)。
3、字串
用單引號'、雙引號"或者'''三引號擴起來的文字。
下面的程式碼定義了三個變數,str1和str2的值都是123qaz。
str3的值為:
123qaz
456wsx
'''三引號用於定義多行字串。
str1 = '123qaz'
str2 = "123qaz"
str3 = '''123qaz
456wsx'''
print(str1)
print(str2)
print(str3)
4、布林型
只有True和False兩個值,例如:
flag True
print(flag)
flag False
print(flag)
布林型別一般用作條件判斷,例如:
a = 1
b = 2
if a > b:
print(a)
else:
print(b)
布林型別還可以用於or、and和not邏輯運算。
or邏輯或運算,當兩個布林變數的值有一個為True時,結果就是True,所有的布林型別的數值都為False時,結果才是False。例如:
flag1 = True flag2 = False print(flag1 or flag1) flag3 = False flag4 = False print(flag3 or flag4)
列印結果:
True
False
and邏輯與運算,只有所有的布林變數為True是,結果才是True,否則結果是False,例如:
flag1 = True
flag2 = False
print(flag1 and flag1)
flag3 = True
flag4 = True
print(flag3 or flag4)
not邏輯非運算,not False的結果為True,not True的結果為False,這是一個單目邏輯運算子。
5、日期時間型別
Python提供了time模組處理時間。
獲取當前時間戳:
>>> import time
>>> print(time.time())
1541082277.3144386
time()函式返回的是浮點數。
localtime()函式返回的是一個struct_time元組,struct_time元組中有9個元素,分別代表年、月、日、小時等。
>>> print(time.localtime(time.time()))
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=1, tm_hour=22, tm_min=30, tm_sec=56, tm_wday=3, tm_yday=305, tm_isdst=0)
struct_time元組中每個元素代表的意義如下:
屬性 | 值 | 代表的意義 |
---|---|---|
tm_year | 2018 | 年 |
tm_mon | 1-12 | 月 |
tm_mday | 1-31 | 日 |
tm_hour | 0-23 | 小時 |
tm_min | 0-59 | 分鐘 |
tm_sec | 0-61 | 秒,61是閏秒 |
tm_wday | 0-6 | 週一到週日,0是週一 |
tm_yday | 1-366 | 一年中的第幾日 |
tm_isdst | 0,1,-1 | 夏令時標識,1是夏令時,0不是夏令時,預設值是-1 |
strftime()方法將時間轉化為字串,具體用法如下:
python >>> print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))#精確到秒的日期格式 2018-11-01 23:00:36 >>> print(time.strftime('%Y',time.localtime()))#顯示年份 2018 >>> print(time.strftime('%m',time.localtime()))#月份 11 >>> print(time.strftime('%d',time.localtime()))#顯示日 01 >>> print(time.strftime('%H:%M:%S',time.localtime()))#顯示當前的時間 23:01:19 >>> print(time.strftime('%Y-%m-%d',time.localtime()))#顯示當前的日期 2018-11-01 >>> print(time.strftime('%U',time.localtime()))#顯示一年當中的第幾周 43 >>> print(time.strftime('%w',time.localtime()))#顯示周幾,4表示週四,0表示週日 4
python
兩個日期相減。
如果日期是字串形式,則必須轉為秒數才能相減:
>>> import datetime
>>> from_time = "2018-11-01 10:10:20"
>>> to_time = "2017-12-23 12:12:12"
>>> d = datetime.datetime.strptime(from_time,"%Y-%m-%d %H:%M:%S")
>>> b = datetime.datetime.strptime(to_time,"%Y-%m-%d %H:%M:%S")
>>> print(time.mktime(d.timetuple()) - time.mktime(b.timetuple()))
27035888.0
datetime.datetime.strptime()方法將字串格式的日期轉換為struct_time元組,time.mktime()方法將struct_time元組日期轉為秒。
字串日期格式和秒互轉
字串日期格式轉為秒:
from_time = "2018-11-01 23:36:35"
d = datetime.datetime.strptime(from_time,"%Y-%m-%d %H:%M:%S")
from_time_float = time.mktime(d.timetuple())
秒轉為字串日期格式:
current_time = time.time()
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(current_time)))
6、列表list
Python中常用的資料型別,用[]將所有元素括起來的集合。列表中的元素可以是任意型別,例如字串、數字型別、布林型別等,還可以是列表。列表中的元素通過“,”逗號分隔,列表中的元素可以修改。
建立一個列表:
list1 = [1,'abc',True]
列表list1有三元素,數字型別1,字串“abc”,布林型別True。
讀取列表元素:
通過索引訪問列表中的元素,下面是訪問第三個元素的方法:
>>> list1 = [1,'abc',True]
>>> print(list1[2])
True
將2變為-2時就是讀取倒數第2個元素:
>>> list1[-2]
'abc'
索引-1是讀取最後一個元素:
>>> list1[-1]
True
當索引越界時出報“IndexError: list index out of range”列表索引超出範圍的錯誤。
>>> print(list1[4])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
求列表長度:
>>> list1 = [1,'abc',True]
>>> print(len(list1))
3
替換列表元素:
通過索引可以直接替換掉列表指定位置的元素,注意索引越界。下面程式碼將list1列表第二個元素從abc變為def
>>> list1 = [1,'abc',True]
>>> print(list1)
[1, 'abc', True]
>>> list1[1]='def'
>>> print(list1)
[1, 'def', True]
pop方法刪除列表元素:
>>> list1 = [1,'abc',True]
>>> list1.pop()
True
>>> print(list1)
[1, 'abc']
>>> list1.pop(0)
1
>>> print(list1)
['abc']
pop()方法刪除最有一個元素,pop(j)方法刪除指定元素,j是索引,注意索引越界的問題。
擷取列表:
>>> list1 = ['a','b','c','d','e','f','g']
>>> list2 = list1[2:4]#擷取從list1的第三個元素開始到第五個元素截止生成新的列表list2
>>> print(list2)
['c', 'd']
>>> list3 = list1[2:]#從list1列表的第三個元素開始擷取生成列表list3
>>> print(list3)
['c', 'd', 'e', 'f', 'g']
列表相加:
兩個列表通過+符號生成新的列表
>>> list1 = ['a','b','c','d','e','f','g']
>>> list2 = [1,2,3]
>>> list3 = list1 + list2
>>> print(list3)
['a', 'b', 'c', 'd', 'e', 'f', 'g', 1, 2, 3]
7、tupple元組
使用()將不同型別元素括起來的集合,元組的特點是資料不能修改。
和list列表一樣,tupple中的元素不限制類型,既可以是整型,也可以是布林型、list列表等,元素之間用逗號分隔。
建立一個tuple:
>>> tuple_a = (1,'abc',False)
>>> print(tuple_a)
(1, 'abc', False)
如果建立的tuple只有一個元素時,必須在唯一的一個元素後面加上“,”來消除歧義:
>>> tuple_c = (1)
>>> print(tuple_c)
1
>>> tuple_d = (1,)
>>> print(tuple_d)
(1,)
通過上面的程式碼可知,如果不在唯一的一個元素後面加上一個",",Python就會認為tuple_c是數字1而不是建立一個tuple例項。
試圖修改tuple中的元素時會報TypeError: 'tuple' object does not support item assignment的錯誤:
>>> tuple_a[0] = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
讀取tupple中的元素:
>>> tupple_a = (1,'abc',False)
>>> print(tupple_a[2])
False
雖然tuple中的元素是不可修改的,但是可以在建立的tuple例項中新增一個list元素,達到元素可變的目的:
>>> tuple_a = (1,[2,'abc'])
>>> print(tuple_a)
(1, [2, 'abc'])
>>> tuple_a[1][1]='def'
>>> print(tuple_a)
(1, [2, 'def'])
上面的程式碼達到了修改tuple例項中元素的目的。
和list列表一樣,,tuple也支援tuple相加、擷取的操作:
>>> tuple_a = (1,2)
>>> tuple_b = ('a','b')
>>> tuple_c = tuple_a + tuple_b #兩個tuple相加
>>> print(tuple_c)
(1, 2, 'a', 'b')
>>> print(tuple_c[1:3])#擷取tuple
(2, 'a')
>>> print(tuple_c[1:])#擷取tuple
(2, 'a', 'b')
由於tuple的元素不可修改,因此tuple沒有刪除元素的方法。
8、Set集合
通過{}符號,將元素括起來的資料型別,元素之間以","逗號分隔,Set集合內的元素不能重複。
建立Set集合:
>>> set_a = set([1,2,3,'a','b','c'])
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b'}
>>> b = {1,2,'a','c'}
>>> print(b)
{'a', 1, 2, 'c'}
建立一個set有兩種方式:
1、使用set()方法,這種方式必須提供一個list作為引數。
2、使用{}方式,如果是建立空的set集合,必須使用set(),{}這種方式是建立空的dict詞典。
從上面的程式碼可以看到set中的元素時無序的。
set會自動過濾掉重複的元素:
>>> set_a = set([1,2,3,2,3,'a','b','c','b','a'])
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b'}
增加set集合元素:
>>> set_a.add(21)
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b', 21}
set集合通過add(key)方法新增元素,重複新增同一個元素不會報錯,但是沒有任何效果:
>>> set_a.add(21)
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b', 21}
>>> set_a.add(21)
>>> print(set_a)
{'a', 1, 2, 3, 'c', 'b', 21}
刪除set集合元素:
>>> set_a.remove('c')
>>> print(set_a)
{'a', 1, 2, 3, 'b', 21}
在刪除集合元素的時候務必要確保該元素的存在,如果刪除一個不存在的元素,會報KeyError的錯誤:
>>> set_a = set([1,2])
>>> print(set_a)
{1, 2}
>>> set_a.remove(12)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 12
>>> set_a.remove(1)
set集合具備數學集合中的交、並、差集等集合運算:
>>> set_b = set([1,'d','e',4,5,'a'])
>>> set_a = set([1,2,3,'a','b','c'])
>>> print(set_a & set_b) #集合交集運算
{'a', 1}
>>> print(set_a | set_b) #集合並集運算
{'a', 1, 2, 3, 'c', 4, 5, 'd', 'b', 'e'}
>>> print(set_a - set_b) #集合差集運算
{'c', 2, 3, 'b'}
>>> print(set_a ^ set_b) #求兩個集合不同時存在的元素
{'c', 2, 'e', 4, 5, 'd', 3, 'b'}
9、dict詞典
key-value鍵值對,和java中的Map一樣,使用{}將鍵值對擴起來,元素之間以“,”逗號分隔。
建立dict:
>>> dict_a = {1:'a',2:'b'}
>>> print(dict_a)
{1: 'a', 2: 'b'}
讀取dict元素:
>>> print(dict_a.get(1))
a
>>> print(dict_a.get(3))
None
dict通過get(key)方法讀取key對應的value值,如果value不存在,則顯示None。
新增dict元素:
通過dict_name[key] = value給dict新增元素
>>> dict_a = {1:'a',2:'b'}
>>> dict_a['a'] = 123
>>> print(dict_a)
{1: 'a', 2: 'b', 'a': 123}
如果同一個key多次加入一個dict中,會覆蓋掉前面的value值。
刪除dict元素:
>>> dict_a.pop('a')
123
>>> print(dict_a)
{1: 'a', 2: 'b'}
>>> dict_a.pop('b')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'b'
通過使用pop(key)方法刪除dict中的鍵值對,如果key不存在,則會報KeyError的錯誤。
遍歷dict中的元素:
遍歷key
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for key in dict_a:
print(key)
1
2
a
b
>>> for key in dict_a.keys():
print(key)
1
2
a
b
上面兩種遍歷key的方式效果是等價的。
遍歷value
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for value in dict_a.values():
print(value)
a
b
3
4
同時遍歷key和value
方法一:
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for k,v in dict_a.items():
print(k,v)
1 a
2 b
a 3
b 4
方法二:
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for kv in dict_a.items():
print(kv)
(1, 'a')
(2, 'b')
('a', 3)
('b', 4)
這種方式會將每個key-value鍵值對轉換為一個tuple。
方法三:
>>> dict_a = {1:'a',2:'b','a':3,'b':4}
>>> for (key,value) in dict_a.items():
print(str(key) + ':' + str(value))
1:a
2:b
a:3
b:4
這種方式要保證key和value都是字串型別。