Python – Các kiểu dữ liệu cơ bản

5/5 - (9 votes)

Trong phần này chúng ta sẽ cùng tìm hiểu về các kiểu dữ liệu cơ bản trong Python.

Kiểu Boolean

Lâu nay người ta thường dịch boolean là kiểu “luận lý”, đối với dân kỹ thuật thì cái từ này nghe hơi khó hiểu, nên mình xin mạn phép dịch là kiểu “đúng sai” cho đơn giản 🙂 Tức là kiểu giá trị này chỉ có hai giá trị là đúng (True) và sai (False), nhưng thực ra thì đối với những người đã lập trình lâu năm thì họ thường gọi là kiểu boolean (hoặc kiểu bool) luôn cho tiện. Hầu như tất cả các ngôn ngữ lập trình đều hỗ trợ kiểu này.

Ví dụ.


import random

male = False
male = bool(random.randint(0, 1))

print (male)

Đoạn code trên có sử dụng module random để tạo số ngẫu nhiên.

 import random

Để sử dụng module này thì chúng ta thêm dòng import random vào đầu chương trình.

 male = bool(random.randint(0, 1))

Và ở đây chúng ta sẽ sử dụng phương thức randint(x, y), phương thức này sẽ trả về giá trị ngẫu nhiên từ x→y, ở đây là 0→1. Sau đó chúng ta chuyển kiểu dữ liệu từ kiểu int sang kiểu bool bằng cách bao bọc lấy phương thức này bằng bool(). Nếu giá trị trả về là 0 thì sẽ được chuyển thành False, ngược lại là True.

Đoạn code dưới đây sẽ cho chúng ta biết các dạng dữ liệu khác khi được chuyển sang kiểu bool sẽ có giá trị nào.


print (bool(True))
print (bool(False))
print (bool("text"))
print (bool(""))
print (bool(' '))
print (bool(0))
print (bool())
print (bool(3))
print (bool(None))
True
False
True
False
True
False
False
True
False

Kiểu None

Đây là một kiểu đặc biệt trong Python. Ý nghĩa của kiểu này là không có giá trị gì cả, không tồn tại, rỗng…v..v


def function():
   pass

print (function())

Trong đoạn code trên, chúng ta định nghĩa một hàm. Chúng ta sẽ tìm hiểu về hàm ở các bài sau. Hàm này cũng không trả về giá trị gì cả nên nó sẽ tự động ngầm trả về giá trị None.

None

Kiểu số

Trong Python, kiểu số có 3 loại là số nguyên, số thực và số phức.


# number of baskets
baskets = 16

# number of apples in a basket
apples_in_basket = 24

# we get the total number of apples
total = baskets * apples_in_basket


print ("There are total of", total, "apples")

Trong ví dụ trên, chúng ta đếm số lượng táo dùng phép nhân trên kiểu số nguyên.

There are total of 384 apples

Ví dụ dưới đây mô tả số thực trong Python.

# 100m is 0.1 km

distance = 0.1

# 9.87s is 9.87/60*60 h

time = 9.87 / 3600

speed = distance / time

print ("The average speed of" \
      " a sprinter is " , speed, "km/h")

Chúng ta tính vận tốc chạy của vận động viên theo công thức vận tốc = quãng đường / thời gian.

print ("The average speed of" \
      " a sprinter is " , speed, "km/h")

Đoạn code trên sử dụng dấu \. Dấu này có tác dụng nối 2 chuỗi ghi trên hai dòng làm 1.

The average speed of a sprinter is  36.4741641337 km/h

String

String là kiểu dữ liệu lưu trữ văn bản.

Chúng ta có thể tạo ra một string bằng dấu nháy đơn, nháy kép hay 3 dấu nháy kép. Khi dùng 3 dấu nháy kép, chúng ta cũng có thể ghi một chuỗi trên nhiều dòng mà không cần dùng dấu \.

a = "proximity alert"
b = 'evacuation'
c = """
requiem 
for
a 
tower
"""

print (a)
print (b)
print (c)

Trong ví dụ trên chúng ta gán 3 chuỗi vào 3 biến a, b, c rồi in ra màn hình.

proximity alert
evacuation

requiem 
for 
a 
tower

Trong một chuỗi chúng ta có thể dùng các ký tự thoát. Ký tự thoát là các ký tự đặc biệt dùng cho nhiều mục đích khác nhau. Xem ví dụ.

print ("Incompatible, it don't matter though\n'cos someone's bound to hear my cry")
print ("Speak out if you do\nYou're not easy to find")

Ký tự \n là ký tự xuống dòng, các đoạn text sau ký tự này sẽ tự động xuống dòng.

Incompatible, it don't matter though
'cos someone's bound to hear my cry
Speak out if you do
You're not easy to find

Tiếp theo chúng ta tìm hiểu về ký tự xóa.

print ("Python\b\b\booo") # prints Pytooo

Ký tự \b xóa 1 ký tự, trong ví dụ trên, chúng ta dùng 3 ký tự \b, do đó 3 ký tự “hon” sẽ bị xóa để nhường chỗ cho 3 ký tự “ooo“.

print ("Towering\tinferno") # prints Towering        inferno

Dòng code trên ví dụ về ký tự tab \t, nó hoạt động giống như khi bạn bấm phim Tab vậy.

"Johnie's dog"
'Johnie\'s dog'

Đôi khi bạn ghi chuỗi trong cặp dấu nháy đơn, và bản thân bên trong chuỗi này bạn cũng cần dùng một dấu nháy đơn khác, lúc này bạn phải thêm một dấu \ trước dấu nháy đơn đó, nếu không trình biên dịch sẽ báo lỗi.

Nếu bạn không muốn sử dụng các ký tự thoát thì bạn thêm r vào trước chuỗi của mình. Các ký tự thoát sẽ được in ra như các ký tự bình thường.

print (r"Another world\nhas come")
Another world\nhas come

Như ở trên dòng chữ Another world\n sẽ được in ra.

Tiếp theo chúng ta sẽ tìm hiểu về cách nhân chuỗi và nối chuỗi.

print ("eagle " * 5)

print ("eagle " "falcon")

print ("eagle " + "and " + "falcon")

Phép nhân * có thể được dùng cho một chuỗi, lúc này nội dung chuỗi sẽ được lặp lại n lần, trong đoạn code trên chữ “eagle” được lặp lại 5 lần. Hai chuỗi để sát nhau sẽ ngầm tự động được nối vào. Và nếu bạn muốn nối chuỗi một cách rõ ràng hơn thì bạn có thể dùng toán tử +.

eagle eagle eagle eagle eagle 
eagle falcon
eagle and falcon

Kiểu Tuple

Kiểu Tuple là kiểu tập hợp nhiều phần tử, kiểu này lưu trữ các phần tử một cách có thứ tự và có thể lưu nhiều kiểu giá trị khác nhau trong một tuple. Giá trị trong tuple không thể thay đổi được.

fruits = ("oranges", "apples", "bananas")
fruits = "oranges", "apples", "bananas"
print (fruits)

Ở trên là hai cách tạo tuple.

first = (1, 2, 3)
second = (4, 5, 6)

print ("len(first) : ", len(first))
print ("max(first) : ", max(first))
print ("min(first) : ", min(first))
print ("first + second :", first + second)
print ("first * 3 : ", first * 3)
print ("1 in first : ", 1 in first)
print ("5 not in second : ", 5 not in second)

Đoạn code trên ví dụ về các thao tác với một tuple. Hàm len() có tác dụng lấy số lượng phần tử trong một tuple. Hàm max() và min() lấy giá trị lớn nhất và nhỏ nhất của tuple. Toán tử + gộp 2 tuple với nhau. Toán tử * tạo ra thêm n tuple. Toán tử in tìm xem một giá trị có nằm trong một tuple hay không.

len(first) :  3
max(first) :  3
min(first) :  1
first + second : (1, 2, 3, 4, 5, 6)
first * 3 :  (1, 2, 3, 1, 2, 3, 1, 2, 3)
1 in first :  True
5 not in second :  False

Tiếp theo chúng ta tìm hiểu về cách truy xuất phần tử.

five = (1, 2, 3, 4, 5)

print ("five[0] : ", five[0])
print ("five[-1] : ", five[-1])
print ("five[-2] : ", five[-2])
print ("five[:] : ", five[:])
print ("five[0:4] : ", five[0:4])
print ("five[1:2] : ", five[1:2])
print ("five[:2] : ", five[:2])
print ("five[:-1] : ", five[:-1])
print ("five[:9] : ", five[:9])

Để lấy một phần tử nào đó trong tuple, chúng ta sử dụng cặp dấu [], và cũng giống như các ngôn ngữ lập trình khác, chỉ số trong một tuple bắt đầu từ 0. Tức là nếu trong tuple có 5 phần tử, thì các phần tử được đánh số từ 0..4. Bạn cũng có thể dùng chỉ số là số nguyên âm, và Python sẽ tự động lấy lùi, chẳng hạn nếu bạn đưa chỉ số là -1, bạn sẽ được phần tử thứ 4. Bạn cũng có thể lấy các đoạn giá trị cố định dùng dấu hai chấm, ví dụ lấy các phần tử là 1, 2, 3, 4 là [1:4], ngoài ra nếu bạn không đưa chỉ số bắt đầu hay chỉ số kết thúc, bạn sẽ lấy được tất cả các phần tử về trước hay về sau đó, ví dụ [:3] sẽ cho ra các phần tử 0, 1, 2, 3.

five[0] :  1
five[-1] :  5
five[-2] :  4
five[:] :  (1, 2, 3, 4, 5)
five[0:4] :  (1, 2, 3, 4)
five[1:2] :  (2,)
five[:2] :  (1, 2)
five[:-1] :  (1, 2, 3, 4)
five[:9] :  (1, 2, 3, 4, 5)

Tuple có thể lưu trữ các kiểu dữ liệu khác nhau một cách linh hoạt.

mix = (1, 2, "solaris", (1, 2, 3))

print ("mix[1] :", mix[1])
print ("mix[2] :", mix[2])
print ("mix[3] :", mix[3])
print ("mix[3][0] :", mix[3][0])
print ("mix[3][1] :", mix[3][1])
print ("mix[3][2] :", mix[3][2])

Trong ví dụ trên, tuple của chúng ta có số nguyên, string và cả một tuple khác.

mix[1] : 2
mix[2] : solaris
mix[3] : (1, 2, 3)
mix[3][0] : 1
mix[3][1] : 2
mix[3][2] : 3

Để truy xuất phần tử của tuple bên trong một tuple, bạn dùng hai cặp dấu [].

Kiểu List

Kiểu list cũng là một kiểu lưu các giá trị tuần tự, một list cũng có thể lưu nhiều giá trị khác nhau. Do đó list và tuple có nhiều điểm tương đồng. Điểm khác biệt giữa list và tuple là các phần tử trong list có thể thay đổi giá trị, ngoài ra list có một số phương thức mà tuple không có. Chúng ta sẽ có nguyên một bài để nói riêng về kiểu list.

actors = ["Jack Nicholson", "Antony Hopkins", "Adrien Brody"]

Để tạo một list thì ta dùng cặp ký tự [].

num = [0, 2, 5, 4, 6, 7]

print (num[0])
print (num[2:])
print (len(num))
print (num + [8, 9])

Như đã nói ở trên, chúng ta có thể dùng các thao tác cộng trừ, lấy chỉ số… như của tuple.

0
[5, 4, 6, 7]
6
[0, 2, 5, 4, 6, 7, 8, 9]

Tiếp theo chúng ta tìm hiểu về một số thao tác của riêng list. Bắt đầu là thao tác sắp xếp một list.

numbers = [4, 3, 6, 1, 2, 0, 5 ]

print (numbers)
numbers.sort()
print (numbers)

Để sắp xếp một list thì chúng ta dùng phương thức sort()Lưu ý chúng ta không thể sắp xếp một list chứa nhiều kiểu dữ liệu khác nhau được, chẳng hạn [1, "Hello"] không thể nào được sắp xếp, vì chúng không cùng kiểu, bạn chỉ có thể sắp xếp các phần tử có cùng kiểu dữ liệu.

[4, 3, 6, 1, 2, 0, 5]
[0, 1, 2, 3, 4, 5, 6]

Phương thức reverse() cũng sắp xếp các phần tử nhưng thep thứ tự ngược lại.

numbers.reverse()   #  [5, 4, 3, 2, 1, 0]

Chúng ta có thể đếm một phần tử xuất hiện bao nhiêu lần trong một list bằng phương thức count().

numbers = [0, 0, 2, 3, 3, 3, 3]

print ("zero is here ",  numbers.count(0), "times") 
print ("one is here ",   numbers.count(1), "times")
print ("two is here ",   numbers.count(2), "time")
print ("three is here ", numbers.count(3), "times")

Trong ví dụ trên chúng ta đếm các số 0, 1, 2, 3 xuất hiện bao nhiêu lần.

zero is here  2 times
one is here  0 times
two is here  1 time
three is here  4 times

Tiếp theo chúng ta tìm hiểu cách thêm, xóa phần tử.

names = []

names.append("Frank")
names.append("Alexis")
names.append("Erika")
names.append("Ludmila")

print (names)
names.insert(0, "Adriana")
print (names)
names.remove("Frank")
names.remove("Alexis")
del names[1]
print (names)
del names[0]
print (names)

Để thêm một phần tử chúng ta dùng phương thức append() hoặc insert(), mặc định append() thêm phần tử mới vào cuối list, còn insert() có thể thêm phần tử vào vị trí bất kỳ do chúng ta quy định.

Để xóa một phần tử chúng dùng phương thức remove() hoặc dùng từ khóa del. Phương thức remove() xóa một phần tử có giá trị nhất định. Còn từ khóa del sẽ xóa phần tử ở một vị trí cụ thể.

['Frank', 'Alexis', 'Erika', 'Ludmila']
['Adriana', 'Frank', 'Alexis', 'Erika', 'Ludmila']
['Adriana', 'Ludmila']
['Ludmila']

Tiếp theo chúng ta tìm hiểu cách thay đổi một list.

first = [1, 2, 3]
second = [4, 5, 6]

first.extend(second)
print (first)

first[0] = 11
first[1] = 22
first[2] = 33
print (first)

print (first.pop(5))
print (first)

Chúng ta có dùng phương thức extend() để nhập một list vào một list khác, dùng phương thức pop() để lấy phần tử thứ n.

[1, 2, 3, 4, 5, 6]
[11, 22, 33, 4, 5, 6]
6
[11, 22, 33, 4, 5]

Tiếp theo là cách tìm vị trí xuất hiện của một giá trị nào đó trong list.

numbers = [0, 1, 2, 3, 3, 4, 5]

print (numbers.index(1))
print (numbers.index(3))

Chúng ta dùng phương thức index(), giá trị trả về là vị trí xuất hiện của phần tử mà chúng ta tìm, nếu có nhiều phần tử có giá trị giống nhau thì phương thức này in ra vị trí đầu tiên kể từ vị trí số 0.

1
3

Tiếp theo là cách chuyển đổi kiểu..

first = [1, 2, 3]
second = (4, 5, 6)

print (tuple(first))
print (list(second))

print (first)
print (second)

Chúng ta có thể dùng hàm tuple() để lấy một tuple từ một list, hoặc dùng hàm list() để lấy một list từ một tuple. Ở đây các list hay tuple nguồn không bị thay đổi mà Python sẽ lấy các giá trị gốc để tạo ra một list hay tuple mới rồi mới trả về cho chúng ta.

(1, 2, 3)
[4, 5, 6]
[1, 2, 3]
(4, 5, 6)

Kiểu Set

Set là kiểu tập hợp các phần tử không có thứ tự, không có nhiều hơn 2 phần tử có cùng một giá trị. Các phép toán có thể dùng trên set là phép hợp, giao, hiệu… giống như trong toán học.

set1 = set(['a', 'b', 'c', 'c', 'd'])
set2 = set(['a', 'b', 'x', 'y', 'z'])

print ("set1: " , set1)
print ("set2: " , set2)
print ("intersection: ", set1 & set2)
print ("union: ", set1 | set2)
print ("difference: ", set1 - set2)
print ("symmetric difference: ", set1 ^ set2)

Để tạo một set thì chúng ta dùng hàm set(). Trong ví dụ trên có 2 set. Chúng ta thực hiện phép giao 2 set bằng toán tử &, kết quả được một set mới có chứa các phần tử của chung cả 2 set, nếu chỉ tồn tại trong 1 set thì không lấy. Dùng toán tử | để thực hiện phép hợp, phép hợp lấy tất cả cá phần tử của cả 2 set. Phép hiệu có toán tử là dấu trừ -, set1 – set2 sẽ trả về các phần tử của set1 và các phần tử vừa tồn tại trong set1, vừa tồn tại trong set2. Cuối cùng phép hiệu đối xứng là toán tử ^, phép toán này lấy các phần tử trong set1 và set2, nhưng nếu tồn tại trong cả 2 set thì không lấy.

set1:  set(['a', 'c', 'b', 'd'])
set2:  set(['a', 'x', 'b', 'y', 'z'])
intersection:  set(['a', 'b'])
union:  set(['a', 'c', 'b', 'd', 'y', 'x', 'z'])
difference:  set(['c', 'd'])
symmetric difference:  set(['c', 'd', 'y', 'x', 'z'])

Tiếp theo là một số thao tác trên set.

set1 = set([1, 2])
set1.add(3)
set1.add(4)

set2 = set([1, 2, 3, 4, 6, 7, 8])
set2.remove(8)

print (set1)
print (set2)

print ("Is set1 subset of set2 ? : ", set1.issubset(set2))
print ("Is set1 superset of set2 ? : ", set1.issuperset(set2))

set1.clear()
print (set1)

Phương thức add() sẽ chèn một phần tử vào set. Phương thức remove() xóa một phần tử tại vị trí bất kỳ. Phương thức clear() xóa toàn bộ phần tử trong set. Phương thức issubset() kiểm tra xem một set có phải là set con của một set khác không. Phương thức issuperset() kiểm tra xem một set có phải là set cha của set khác không.

 
set([1, 2, 3, 4]) 
set([1, 2, 3, 4, 6, 7]) 
Is set1 subset of set2 ? : True 
Is set1 superset of set2 ? : False set([]) 

Kiểu từ điển

Kiểu này lưu trữ các phần tử theo dạng các cặp khóa-giá trị (keyvalue). Các chỉ số trong từ điển là các khóa. Do đó các khóa phải khác nhau, chúng ta sẽ có một bài riêng để nói về kiểu này.

words = { 'girl': 'Maedchen', 'house': 'Haus', 'death': 'Tod' }

print (words['house'])

print (words.keys())
print (words.values())
print (words.items())

print (words.pop('girl'))
print (words)
words.clear()
print (words)

Ví dụ trên mô tả sơ lược về cách sử dụng kiểu từ điển.

Haus
['house', 'girl', 'death']
['Haus', 'Maedchen', 'Tod']
[('house', 'Haus'), ('girl', 'Maedchen'), ('death', 'Tod')]
Maedchen
{'house': 'Haus', 'death': 'Tod'}
{}
0 0 votes
Article Rating
Subscribe
Thông báo cho tôi qua email khi
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

6 Comments
Inline Feedbacks
View all comments
hoàng
hoàng
7 năm trước

Bài viết rất hay và nhiều kiến thức bổ ích. Cám ơn tác giả nhiều

kieuthianh
kieuthianh
7 năm trước

Em chào ad ạ.Ad cho em hỏi đoạn này với ạ.
>>>five = (1,2,3,4,5)
>>>print(“five[0:4] :”, five[0:4])
five[0:4] : (1, 2, 3, 4)
Đoạn code này ad giải thích cho em kĩ hơn được không ạ?
Nó chạy từ đầu đến cuối và bỏ qua giá trị 0 ạ?? Nếu như vậy thì nó sẽ lấy được giá trị 5 phải không ạ?
Em cảm ơn ad nhiều ạ.

TIẾN
TIẾN
6 năm trước

bài viết dễ hiểu , thank ad . thêm nhiều vd sẽ tốt hơn nữa

Nguyễn Tấn Thành
Nguyễn Tấn Thành
4 năm trước

Cho mình hỏi trong Kiểu SET
print (“symmetric difference: “, set1 ^ set2)

output: symmetric difference: set([”d’,’c’,’z’,’x’,’y’])
pritn (set2 ^ set1)

output: ‘d’, ‘z’, ‘c’, ‘x’, ‘y’
thứ tự này Python lấy theo quy tắc nào vậy ạ?