ADMIN: nhanguyen@hcmut.edu.vn

3. Các kiểu dữ liệu phổ biến

Biến và phép gán trong Python

  • Biến là các vị trí bộ nhớ được dành riêng để lưu trữ dữ liệu.
  • Khi một biến đã được lưu trữ, một khoảng không gian đã được cấp phát trong bộ nhớ đó.
  • Dựa trên kiểu dữ liệu của một biến, trình thông dịch cấp phát bộ nhớ và quyết định những gì có thể được lưu trữ trong khu nhớ dành riêng cho biến đó.
  • Bằng việc gán các kiểu dữ liệu khác nhau cho các biến, bạn có thể lưu trữ số nguyên, thập phân hoặc ký tự trong các biến này
  • Trong Python, không cần khai báo biến một cách tường minh. Khi bạn gán bất cứ giá trị nào cho biến thì biến đó được khai báo một cách tự động. Phép gán được thực hiện bởi toán tử “=”.
  • Toán hạng trái của toán tử “=” là tên biến và toán hạng phải là giá trị được lưu trữ trong biến

Ví dụ: lệnh gán total = 2 tạo ra một biến có tên là total và cho nó tham chiếu đến một đối tượng dữ liệu số có giá trị 2

  • Có thể gán biến đơn hoặc gán đa biến (multiple assignment)
a=3
print(a)
b='xxx'
print(b)
a=b=c=4
print(a)
print(b)
print(c)
a,b,c=4,5,6
print(a); print(b); print(c)
  • Trong một phép gán, vế phải được tính toán giá trị, sau đó một tham chiếu đến dữ liệu kết quả được gán cho tên biến ở vế trái
  • Tại thời điểm này, biến total có giá trị là kiểu số nguyên (số 2)
  • Nếu một phép gán mới được tạo ra cùng với tên biến cũ, giả sử total = True (True là kiểu dữ liệu luận lý). 
  • Lúc này, kiểu dữ liệu của biến total được thay đổi thành kiểu luận lý theo giá trị được tham chiếu của phép gán

–> Đây là đặc tính động của Python (dynamic characteristic)

–> Biến có thể thay đổi kiểu dữ liệu!


Các kiểu dữ liệu trong Python

Python có 5 kiểu dữ liệu chuẩn

Kiểu luận lý (boolean)

  • Kiểu giá trị luận lý thường dùng trong các biểu thức điều kiện khi lập trình (if, while)
  • Kiểu luận lý chỉ có 2 kết quả là True (hay 1) hoặc False (hay 0)
  • Các toán tử: and, or, not

Ví dụ:

>>> 2 > 1
True
>>>b = 1 > 5
>>>b
>>>True and False
False
>>>True >= False
True
>>>True is 1
False
>>>True == 1
True
>>>5 is 5
True
>>>True and 1
1
>>>1 and True
True

1. Numeric types (Kiểu số)

  • Kiểu dữ liệu Number lưu trữ các giá trị số.
  • Chúng là các kiểu dữ liệu immutable, hay là kiểu dữ liệu không thay đổi, nghĩa là các thay đổi về giá trị của kiểu dữ liệu số này sẽ tạo ra một đối tượng được cấp phát mới
  • Các đối tượng Number được tạo khi bạn gán một giá trị cho chúng

Ví dụ:

>>>var1=3
>>>var2=5
  • Xóa tham chiếu tới một đối tượng Number: sử dụng lệnh del
>>>del var1
>>>var1
NameError: name ‘var1' is not defined
>>>a,b,c=1,2,3
>>>del a,b

Các kiểu dữ liệu số thường dùng

  • Kiểu int: kiểu số nguyên không có dấu thập phân.
  • Kiểu float: số thực với dấu thập phân. Kiểu này cũng có thể được viết ở dạng số mũ của 10 với E hoặc e như (2.5e2 = 2.5 x 102 = 250)
  • Kiểu complex: số phức trong dạng a + bj, với a và b là số thực và j (hoặc J) biểu diễn căn bậc hai của -1

Ví dụ:

>>> a = 2
>>> print(a)
>>> b = 2.
>>> print(b)
>>> c = 2 + 3j
>>> print(c)
>>> d = 5 + 2e2
>>> print(d)

Các hàm số học thường dùng

>>> import math
>>> from math import *
HàmMiêu tả
abs(x)|x|
int(x)Chuyển thành số nguyên
float(x)Chuyển thành số thực
complex(re, im)Chuyển thành số phức
c.conjugate()Liên hợp của số phức c
pow(x, y)xy
x**yxy
HàmMiêu tả
math.trunc(x)
math.floor(x)
math.ceil(x)
math.sqrt(x)Căn bậc 2 của x
math.exp(x)e**x
math.log(x)ln(x)
math.log10(x)log(x) cơ số 10
math.log(x,n)log(x) cơ số n

2. Text Sequence Type – str

  • String là một trong các kiểu phổ biến nhất trong Python
  • String trong Python là immutable
  • Có thể tạo các chuỗi bằng cách bao một text trong một trích dẫn đơn hoặc trích dẫn kép. Python coi các lệnh trích dẫn đơn và kép là như nhau

Ví dụ:

>>> text1 = 'I will be an engineer'
>>> print(text1)
>>> text2 = "I will be a CAE engineer"
>>> print(text2)

Truy cập các giá trị trong String:

  • Python không hỗ trợ kiểu chữ cái; chúng được coi như các chuỗi có độ dài là 1.
  • String được lưu dạng các ký tự đơn trong vị trí ô nhớ liên tiếp nhau
  • String là có thể được truy cập từ cả hai hướng, dùng cú pháp
    – tiến về trước forward (bắt đầu từ 0)
    – ngược về sau backward (bắt đầu từ -1)

Ví dụ:

>>>var1 = 'Hello Python!'
>>>var2 = “I am a CAE engineer"
>>>print("var1[0]: ", var1[0])
var1[0]:  H
>>>print("var2[1:5]: ", var2[1:5])
var2[1:5]:   am
>>>print("var2[1:5]: " + var2[1:5])
var2[1:5]:  am
>>>var1 = 'Hello Python!'
>>>var2 = “I am a CAE engineer"
>>>print(var1[:6] + 'How are you? ')
Hello How are you?
>>>print(var1[:6	] , 'How are you? ')
Hello  How are you?
>>>print(var1[-3:])
on!
>>>print(var1[-4:-2])
ho

Các toán tử thường dùng trong chuỗi

  • Nối các chuỗi:
>>> 'Today ' + 'is ' + ‘Tuesday'
>>> 'abc ' + 3  #lỗi vì khác kiểu dữ liệu
  • Lặp chuỗi:
>>> 3*'Today'
>>> "Today"*3
  • Các toán tử thành phần trong chuỗi: in, not in
>>> text1 = "Today is Tuesday"
>>> "is" in text1
True
>>> "si" in text1
False

>>> "si" not in text1
True

Các toán tử quan hệ để thao tác với String: <,>, <=, >=, ==, !=, <>

Các chuỗi được so sánh dựa trên giá trị ASCII

>>> “Today” == “Today”
True
>>> “Today” == “today”
False
>>> “T” < “t”
True

Các toán tử định dạng chuỗi

>>> print("Bill Gates has %d billions %s" % (100, “USD”))
>>> print("Bill Gates has %e billions %s" % (100, “USD”))
>>> print("Bill Gates has %f billions %s" % (100, “USD”))

Xử lý các ký tự đặc biệt

\n : ký tự xuống hàng

\t : ký tự tab

>>> print("ky tu \n dung de xuong hang")
ky tu 
 dung de xuong hang
>>> print(r"ky tu \n dung de xuong hang")
ky tu \n dung de xuong hang
>>> print("ky tu ""\t"" dung de TAB")
ky tu 	dung de TAB
>>> print("ky tu "r"\t"" dung de TAB") 
ky tu \t dung de TAB

: chuỗi có dấu nháy đơn

Cách 1: dùng định dạng chuỗi bằng dấu nháy kép

>>> "It isn't"
"It isn't"

Cách 2: dùng ký tự \ để thoát cặp nháy đơn

>>> 'It isn\'t'
'It isn’t'

: chuỗi có dấu nháy kép

dùng định dạng chuỗi bằng dấu nháy đơn

>>> 'She said: " I love you! "'

Một số hàm xử lý chuỗi

>>> text = “today”
>>> text.capitalize()
Today
>>> text = “today is Tuesday”
>>> text.count(“day”, 0, 7)
>>> text.count(“day”, 0, 20)
>>> text = “today is Tuesday”
>>> text.upper()
>>> text.lower()
>>> text = “today is Tuesday”
>>> len(text)
>>> text = “today is Tuesday”
>>> text.replace(“day”,”Tuesday”,1)

3. List

  • List trong Python là cấu trúc dữ liệu có khả năng lưu giữ các kiểu dữ liệu khác nhau
  • List trong Python là kiểu thay đổi (mutable), nghĩa là Python sẽ không tạo một List mới khi một phần tử trong List bị sửa đổi
  • List giữ các đối tượng khác nhau trong một thứ tự đã cho. Các hoạt động khác nhau như chèn hoặc xóa có thể được thực hiện trên List
  • Một List có thể được tạo ra bởi lưu trữ một dãy các kiểu giá trị khác nhau được phân biệt bởi các dấu phẩy

Cúpháp để tạo List: <list_name>=[giatri1, giatri2, …, giatriN];

>>> ckt19 = [“CKT19”, “GV: Nguyen Thanh Nha”, 54, 4]
>>> diemThi = [5, 8, 9, 10, 2]

Truy xuất giá trị trong List

  • Tương tự như String, List có thể được truy xuất từ cả hai hướng
    – tiến về trước forward (bắt đầu từ 0)
    – ngược về sau backward (bắt đầu từ -1)
  • Cú pháp truy cập giá trị List: < list_name >[index]
>>> ckt19 = [“CKT19”, “GVCN: Nguyen Thai Hien”, 54, 46]
>>> ckt19[0]
'CKT19‘
>>> ckt19[0:2]
[“CKT19”, “GVCN: Nguyen Thai Hien”]
>>> ckt19[-1]
46

VD 2 cách đánh chỉ số trong Python:

– Từ <Start> đến <End>: bắt đầu từ 0, tăng dần.
– Từ <End> đến <Start>: bắt đầu từ -1, giảm dần.

Vídụ:

List1[1] = List1[-6] = B
List1[3] = List1[-4] = D

Để trích xuất một số đối tượng con từ đối tượng đã có:

Cú pháp: <list_name>[Start:Stop:Step]

Trong đó, < list_name> là tên của đối tượng cần cắt lát (có thể là string, list, array, …)

  • Start là chỉ số của phần tử bắt đầu
  • Stop là chỉ số của phần tử kết thúc
  • Step là bước nhảy

Lát cắt này bao gồm các phần tử từ vị trí <Start> đến trước vị trí <Stop> (khôngbaogồmphầntử <Stop>)

Ví dụ:

>>> list1 = ['a','b','c','d','e','f','g']
>>> list1[1:3]
['b', 'c']
>>> list1 = ['a','b','c','d','e','f','g']
>>> list1[0:6:2]
['a', 'c', 'e']

Các thao tác cơ bản trên List

  • Phép cộng + và phép nhân * -> Tạo ra List mới
>>> list1 = [2, 3, 5, 4]
>>> list2 = [“a”, “b”, “c”]
>>> list3 = list1 + list2
>>> list3
[2, 3, 5, 4, “a”, “b”, “c”]
>>> list4 = 2*list1
>>> list4
[2, 3, 5, 4, 2, 3, 5, 4]
  • List trong List
>>> list1 = [2, 3, 5, 4]
>>> list5 = [0, 1, 0, list1]
>>> list5
[0, 1, 0, [2, 3, 5, 4]]
>>> list5[3]
[2, 3, 5, 4]
>>> list5[3][1]
3

Các thao tác cơ bản trên List: cập nhật giá trị

  • Có thể cập nhật một hoặc nhiều phần tử của List bằng phép gán giá trị cho vị trí cụ thể trong List
  • Cú pháp: <list_name>[index]=<value>
>>> list1 = [2, 3, 5, 4]
>>> list1[1] = 'xyz'
>>> list1
[2, 'xyz', 5, 4]

Các thao tác cơ bản trên List: thêm giá trị vào cuối

  • Có thể thêm một hoặc nhiều phần tử vào cuối List bằng lệnh append
  • Cú pháp: <list_name>.append(item)
>>> list1 = [2, 3, 5, 4]
>>> list1.append(6)
>>> list1
[2, 3, 5, 4, 6]
>>> list1 = [2, 3, 5, 4]
>>> list1.append([6, “a”])
>>> list1
[2, 3, 5, 4, [6, 'a']]

Chú ý: Chỉ có 1 thông số item trong lệnh append

>>> list1.append(6,'a')
TypeError: append() takes exactly one argument (2 given)

Các thao tác cơ bản trên List: xóa phần tử

  • Có thể xóa một hoặc nhiều phần tử trong List bằng lệnh del (biết trước vị trí cần xóa)
  • Cú pháp: del <list_name>[index]
>>> list1 = [2, 3, 5, 4, 'a']
>>> del list1[1]
>>> list1
[2, 5, 4, 'a']
>>> list1 = [2, 3, 5, 4, 'a']
>>> del list1[2:4]
>>> list1
[2, 3, 'a']
  • Có thể xóa một phần tử trong List bằng lệnh remove (biết trước giá trị cần xóa)
  • Cú pháp: <list_name>.remove(item)
>>> list1 = [2, 3, 5, 4, 'a']
>>> list1.remove(5)
>>> list1
[2, 3, 4, 'a']

Một số hàm và phương thức thường dùng trên List

HàmMiêu tả
cmp(list1, list2)So sánh các phần tử trong hai list
len(list)Trả về độ dài của list
max(list), min(list)Trả về phần tử có giá trị lớn nhất/nhỏ nhất trong list
Phương thứcMiêu tả
list.count(obj)Đếm số lần obj xuất hiện trong list
list.extend(seq)Thêm list seq vào sau list
list.reverse()Đảo ngược các thành phần
list.sort()Sắp xếp các thành phần từ nhỏ đến lớn

4. Tuple

  • Tuple là dãy các đối tượng không thay đổi (immutable) trong Python, vì thế tuple không thể bị thay đổi. Các tuple cũng là các dãy giống như List
  • Các đối tượng trong tuple được phân biệt bởi dấu phẩy và được bao quanh bởi dấu ngoặc đơn (). Nếu các dấu ngoặc đơn không được cung cấp với một dãy, thì nó được coi như là tuple
  • Giống như chỉ số của chuỗi và list, chỉ mục của tuple bắt đầu từ 0
  • Cú pháp tạo Tuple: <tuple_name>=(value1, value2, …, valueN)
>>> ckt16 = (“CKT16”, “GVCN: PQH”, 54, 46)
>>> diemThi = 5, 8, 9, 10, 2
>>> diemKT = ()

Chú ý: Nếu tuple có 1 phần tử đơn thì phải có dấu phẩy cuối

>>> tuple1 = (5,)

Truy xuất các giá trị trong Tuple

  • Tương tự như List, Tuple có thể được truy xuất từ cả hai hướng
    – tiến về trước forward (bắt đầu từ 0)
    – ngược về sau backward (bắt đầu từ -1)
  • Cú pháp truy cập giá trị Tuple: <Tuple_name>[index]
>>> t1=(1,3,2,"x","y")
>>> t1[0:2]
(1, 3)
>>> t1=(1,3,2,”x”,”y”)
>>> t1[-1]
‘y’
  • Tuple trong Tuple
>>> t2=(1,3,2,(”x”,”y”))
>>> t2
(1, 3, 2, ('x', 'y'))
>>> t2=(1,3,2,(”x”,”y”))
>>> t2[3][0]
‘x’

Các thao tác cơ bản trên Tuple

  • Phép cộng + và phép nhân *  -> Tạo ra Tuple mới
>>> t1 = (2, 3, 5, 4)
>>> t2 = (“a”, “b”, “c”)
>>> t3 = list1 + list2
>>> t3
(2, 3, 5, 4, “a”, “b”, “c”)
>>> t4 = 2*t1
>>> t4
(2, 3, 5, 4, 2, 3, 5, 4)
  • Xóa Tuple: del <Tuple_name>
>>> del t4
>>> t4

Chú ý:

  • Không thể xóa các phần tử đơn trong tuple
  • Không thể cập nhất giá trị các phần tử trong tuple

Một số hàm thường dùng trên Tuple

HàmMiêu tả
cmp(tuple1, tuple2)So sánh các phần tử trong hai tuple
len(tuple)Trả về độ dài của tuple
max(tuple), min(tuple)Trả về phần tử có giá trị lớn nhất/nhỏ nhất trong tuple
list.count(obj)Đếm số lần obj xuất hiện trong tuple

5. Dictionary

  • Dictionary là một tập hợp các cặp key và value không có thứ tự
  • Dictionary là một container chứa dữ liệu, được bao quanh bởi cặp dấu ngoặc nhọn { }. Mỗi cặp key-value được xem như là một item
  • Key mà đã truyền cho item đó phải là duy nhất, trong khi đó value có thể là bất kỳ kiểu giá trị nào
  • Key phải là một kiểu dữ liệu không thay đổi (immutable) như chuỗi, số hoặc tuple
  • Key và value được phân biệt riêng rẽ bởi một dấu hai chấm (:). Các item phân biệt nhau bởi một dấu phẩy (,)

Cú pháp tạo Dictionary

<dict_name>={key1:value1,key2:value2 …, keyN:valueN}

>>> char1 = {'Name':'Mr. Bean', 'Born': 1960, 'Heigh': 170}
>>> char2 = {'Name':'Mr. Bean', 'Born': 1960, ['Heigh‘, 'Weight']: 170}

Chú ý:

Khi có nhiều key giống nhau, phép gán cuối được thực hiện à chỉ truy xuất được value ứng với key cuối đó

>>> char3 = {'Name':'Hector', 'Born': 1960, 'Heigh': 180, 'Born': 1970}
>>> char3['Born']

Truy xuất giá trị trong Dictionary

Cú pháp: <dict_name>[key]

>>> char1 = {'Name':'Mr. Bean', 'Born': 1960, 'Heigh': 170}
>>> char1['Born']
1960
>>> char1['Die']

Cập nhật giá trị trong Dictionary

Cú pháp: <dict_name>[key] = newValue

data1={'ID':100, 'Name':'Thanh', 'Job':'Developer'}
data2={'ID':101, 'Name':'Chinh', 'Job':'Trainer'}
data1['Job']='Manager‘		# Cập nhật Job cho data1
data2['SalaryLevel']=1000  	# thêm 1 item cho dict data2
data1['SalaryLevel']=10000

Xóa phần tử trong Dictionary

Cú pháp: del <dict_name>[key]

>>> char1 = {'Name':'Mr. Bean', 'Born': 1960, 'Heigh': 170}
>>> del char1['Born']
>>> char1

Xóa cả Dictionary

Cú pháp: del <dict_name>

>>> del char1
>>> char1

Một số hàm và phương thức thường dùng trong Dictionary

HàmMiêu tả
cmp(dict1, dict2)So sánh các phần tử trong hai dict
len(dict)Trả về độ dài của dict
str(dict)Trả về chuỗi có thể in ra được cho dict
Phương thứcMiêu tả
dict.clear()Xóa tất cả phần tử của dict
dict.copy()Trả về bản sao của dict
dict.get(key)Trả về giá trị của key đã cho. Nếu key không có mặt thì phương thức này trả về None
dict.has_key(key)Trả về true nếu key là có mặt trong Dictionary, nếu không là false