Python-Kiểu dữ liệu

Trong phần này của hướng dẫn lập trình Python, chúng ta nói về các kiểu dữ liệu Python.
Các chương trình máy tính, chẳng hạn như bảng tính trong excel, trình soạn thảo văn bản, máy tính hoặc ứng dụng chat, xử lí dữ liệu. Các công cụ để làm việc với nhiều kiểu dữ liệu khác nhau là một phần thiết yếu của ngôn ngữ máy tính hiện đại.

Định nghĩa kiểu dữ liệu

Kiểu dữ liệu là một tập hợp các giá trị và các phép toán được phép trên các giá trị đó.

Python có một tập hợp rất nhiều các kiểu dữ liệu hữu ích. Các kiểu dữ liệu của Python được xây dựng trong core của ngôn ngữ. Chúng rất dễ sử dụng và đơn giản.

Kiểu Boolean

Trong thế giới của chúng ta, sự vật sự việc luôn có 2 mặt đối lập. Có một Trời và Đất, nước và lửa, nam và nữ, tình yêu và lòng thù hận. Trong ngôn ngữ lập trình Python, kiểu dữ liệu Boolean là kiểu dữ liệu nguyên thủy có một trong hai giá trị: true hoặc false. Đây là một kiểu dữ liệu cơ bản.

Ví dụ:
Cha mẹ hạnh phúc đang chờ đợi một đứa trẻ chào đời. Họ đã chọn một cái tên cho cả hai khả năng. Nếu đó là một cậu bé, họ có thể đã chọn John. Nếu đó là một cô gái, họ có thể đã chọn Victoria.
kid.py

import random

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

if male:
   print("We will use name John")
else:
   print("We will use name Victoria")

Script trên sử dụng hàm tạo số nguyên ngẫu nhiên để mô phỏng kết quả.

import random

Import module random được sử dụng để tính toán các số ngẫu nhiên.

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

chúng ta sử dụng 2 function. Hàm randint() trả về một số ngẫu nhiên nằm trong khoảng (0, 1). Hàm bool() chuyển đổi các số nguyên thành các giá trị boolean.

if male:
    print("We will use name John")
else:
    print("We will use name Victoria")

Đoạn code trên hiển thị tên lên màn hình console. Từ khóa if hoạt động với các giá trị boolean. Nếu nam là True, hiển thị “We will use name John”. Nếu nó có giá trị False, hiển thị “We will use name Victoria”.

Script sau đây hiển thị một số giá trị mà được coi là true hoặc false.

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

Kết quả đoạn script

True
False
True
False
True
False
False
True
False

Kiểu None

Có một kiểu dữ liệu đặc biệt khác – None. Kiểu dữ liệu này có nghĩa là không tồn tại, không xác định hoặc trống.
none.py

def function():
    pass

print(function())

Trong ví dụ này, chúng ta define hàm function(). Về function trong Python sẽ được giới thiệu ở các bài tiếp theo. Hàm không thực hiện xử lí nào. Nó không trả về bất kỳ giá trị nào một cách rõ ràng. Một hàm như vậy sẽ trả về None.

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe test.py
None

Đây là kết quả chạy file non.py

Kiểu số

Trong ngôn ngữ lập trình Python, chúng ta có số nguyên, số dấu phẩy động và số phức.
Nếu chúng ta làm việc với các số nguyên, chúng ta xử lý các thực thể rời rạc. Ví dụ: sẽ sử dụng số nguyên để đếm táo.

# apples.py

# 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 script, đếm tổng số lượng táo bằng việc sử dụng phép toán nhân.

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe apples.py
There are total of 384 apples 

Số dấu phẩy động đại diện cho số thực trong máy tính. Số thực đo các đại lượng liên tục. Giả sử một vận động viên chạy nước rút trong 100m chạy 9,87 giây. Vận tốc của anh ta tính bằng km / h?

sprinter.py

# 100 m is 0.1 km

distance = 0.1

# 9.87 s is 9.87/60*60 h

time = 9.87 / 3600

speed = distance / time

print("The average speed of a sprinter is {0} km/h".format(speed))

Tốc độ = Quãng đường / thời gian

print("The average speed of a sprinter is {0} km/h".format(speed))

Chúng ta sử dụng hàm format() để build message và in ra màn hình console

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe sprinter.py
The average speed of a sprinter is  36.4741641337 km/h

Đây là output của script sprinter.py. Giá trị 36.4741641337 là một số dấu phẩy động.

Kiểu string

Chuỗi là kiểu dữ liệu biểu diễn dữ liệu dạng văn bản trong chương trình máy tính.

Các chuỗi trong Python có thể được tạo bằng cách sử dụng dấu ngoặc kép, dấu ngoặc kép và dấu ngoặc kép. Khi chúng ta sử dụng dấu ngoặc kép, các chuỗi có thể kéo dài nhiều dòng mà không cần sử dụng ký tự xuống dòng.

strings.py

# strings.py

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

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

Trong ví dụ này, chúng ta gán ba ký tự chuỗi cho các biến a, b và c. Sau đó, chúng ta in chúng ra màn hình console.

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe strings.py
proximity alert
evacuation

requiem 
for 
a 
tower

Đây là output của script string.py.

Khi chúng ta làm việc với chuỗi, chúng ta có thể sử dụng kí tự xuống dòng. Kí tự xuống dòng là các ký tự đặc biệt có mục đích cụ thể khi được sử dụng trong một chuỗi

print("   bbb\raaa") # prints aaabbb

Dấu xuống dòng \ r là một ký tự điều khiển kết thúc dòng về bắt đầu dòng mới.

Introduce.py

print("My name's Viet.\nI'm 31 years old.")

\n là kí tự điều khiển để bắt đầu dòng mới

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe Introduce.py
My name's Viet.
I'm 31 years old.

Tiếp theo, chúng ta tìm hiểu kí tự điều khiển backspace qua ví dụ sau

print("Python\b\b\booo") 

Ký tự backspace \b di chuyển con trỏ trở lại một ký tự. Trong ví dụ này, chúng tôi sử dụng ba ký tự \b để xóa ba ký tự và thay thế chúng bằng ba ký tự o. Kết quả như sau

>>> print("Python\b\b\booo")
Pytooo

Kí tự tab \t

print("Hello\tworld")

Kí tự tab \t thêm space giữa chuỗi kí tự. Kết quả như sau

>>> print("Hello\tworld")
Hello   world

Bạn cũng có thể chèn kí tự nháy đơn vào chuỗi kí tự bằng cách thêm dấu \

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe
>>> "Johnie's dog"
"Johnie's dog"
>>> 'Johnie\'s dog'
"Johnie's dog"

Chúng ta có thể dùng hàm len() để tính độ dài của string

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe
>>> print("eagle has", len("eagle"), "characters")
eagle has 5 characters

Nếu thêm kí tự ‘r’vào string, chúng ta nhận được string nguyên bản. Xem ví dụ sau

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe
>>> print(r"Another world\n")
Another world\n

Kết quả string bao gồm cả kí tự \n

Trong ví dụ tiếp theo, chúng ta tìm hiểu về phép nhân và nối string
strings2.py

# strings2.py

print("eagle " * 5)

print("eagle " "falcon")

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

Toán tử * lặp lại chuỗi n lần. Trong ví dụ này là năm lần. Chúng ta cũng có thể sử dụng toán tử + để nối các string.
Đây là kết quả của strings2.py

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe strings2.py
eagle eagle eagle eagle eagle
eagle falcon
eagle and falcon

Python có rất nhiều các kiểu dữ liệu build-in (đã được tích vào ngôn ngữ Python, bạn chỉ cần sử dụng, không cần định nghĩa mới) như: tuples, lists, sets, and dictionaries.

Kiểu tuples

Tuple là một chuỗi kiểu dữ liệu bất biến. Tuple có thể chứa các kiểu dữ liệu hỗn hợp.

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

Tuples được tạo bằng cách sử dụng dấu ngoặc tròn. Ở đây chúng ta có một tuple bao gồm ba loại trái cây.

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe
>>> fruits = "apples", "oranges", "bananas"
>>> print(fruits)
('apples', 'oranges', 'bananas')
>>>

Dấu ngoặc đơn không bắt buộc. Chúng ta có thể bỏ qua chúng.
tuples.py

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)

Ví dụ này minh họa phép toán cơ bản với tuple. Hàm len() trả về số phần tử trong tuple first. Hàm max() trả về giá trị lớn nhất và min() là giá trị nhỏ nhất. Toán tử cộng 2 tuple, toán tử nhân sẽ nhân tuple. Toán tử in xác định xem giá trị có nằm trong tuple hay không.
Kết quả script tuples.py như sau

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe tuples.py
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

Ví dụ tiếp theo, chúng ta tìm hiểu cách truy vấn tuple
tuples2.py

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])

Để truy vấn phần tử trong tuple, chúng ta sử dụng dấu ngoặc vuông []. Lưu ý rằng chúng ta đếm các index từ 0. Nếu tuple có 5 phần tử, index là 0 … 4. Nếu chúng ta sử dụng một index âm, chúng ta sẽ nhận được phần tử cuối trong tuple. Vì vậy, chỉ số -1 nhận phần tử cuối cùng, -2 nhận phần tử cuối cùng trừ một phần tử. Python cho phép tạo ra sub-tuple từ tuple bằng cách sử dụng dấu :. Ví dụ: [0:4] cho (1, 2, 3, 4). Lưu ý rằng phần tử cuối cùng không được bao gồm.

Chúng ta có thể bỏ qua một hoặc cả hai index. [: 4] cho kết quả (1, 2, 3, 4). [0:] cho (1, 2, 3, 4, 5). Nếu chúng index vượt quá kích thước tuple, trả về toàn bộ các phần tử tuple.
Đây là kết quả script tuples2.py

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe tuples2.py
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ể chứa các kiểu dữ liệu khác nhau
tuples_mix.py

# tuples_mix.py

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ụ này, tuple bao gồm số nguyên, string và tuple
Đây là kết quả script tuples_mix.py

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe tuples_mix.py
mix[1] : 2
mix[2] : solaris
mix[3] : (1, 2, 3)
mix[3][0] : 1
mix[3][1] : 2
mix[3][2] : 3

Chúng ta có 1 chú ý khi xử lí tuple bao gồm 1 phần tử. Dấu ngoặc đơn cũng được sử dụng trong biểu thức. Vậy làm thế nào có thể phân biệt giữa 1 biểu thức và 1 phần tử tuple. Người tạo ra Python đã quyết định sử dụng dấu phẩy để ám chỉ đang sử dụng tuple
tuple_one.py

# tuple_one.py

print((3 + 7))
print((3 + 7, ))

Câu lệnh thứ nhất, trình thông dịch Python hiểu là biểu thức toán học, in ra giá trị 10
Câu lệnh thứ hai, trình thông dịch Python hiểu là tuple gồm 1 phần tử, in ra tuple 1 phần tử 10

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe test.py
10
(10,)

Kiểu list

List là chuỗi kiểu dữ liệu có thể thay đổi. List có thể chứa kiểu dữ liệu khác nhau. List và tuple có nhiều đặc tính chung. Vì list là chuỗi kiểu dữ liệu có thể chỉnh sửa, list có thêm vài phép toán so với tuple.

actors = ["Tung", "Thanh", "Phuong"]

List được tạo bằng cách sử dụng ngoặc vuông [].

list_simple.py

# simple_list.py

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

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

Các toán tử của list giống như toán tử tuple. Kết quả như sau:

C:\Users\vietvh3\AppData\Local\Programs\Python\Python37>python.exe list_simple.py
0
[5, 4, 6, 7]
6
[0, 2, 5, 4, 6, 7, 8, 9]

Tiếp theo, chúng ta tìm hiểu việc sắp xếp phần tử trong list
list_sorting.py

# list_sorting.py

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

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

Trong ví dụ này, khai báo list number gồm 7 phần tử. Sau đó sắp xếp list bằng hàm sort().
Hàm reverse() đảo ngược phần tử trong list

C:\Programs\Python\Python37>python.exe list_sorting.py
[4, 3, 6, 1, 2, 0, 5]
[0, 1, 2, 3, 4, 5, 6]
[6, 5, 4, 3, 2, 1, 0]

Tiếp theo, chúng ta đếm số lần xuất hiện các phần tử trong list
list_counting_elements.py

#!/usr/bin/env python

# list_counting_elements.py

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") 

Kết quả script list_counting_elements.py

C:\Programs\Python\Python37>python.exe list_counting_elements.py
zero is here 2 times
one is here 0 times
two is here 1 time
three is here 4 times

Ví dụ: Chèn, xóa phần tử khỏi list
list_modify.py

# list_modify.py

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)

Trong ví dụ này, chúng ta tạo list trống.
– Hàm append() để thêm phần tử mới vào list, các phần tử được nối theo cách liên tiếp.
– Hàm insert() chèn các phần tử mới vào một vị trí nhất định, các phần tử hiện có không bị xóa, chúng được chuyển vị trí.
– Hàm remove() xóa một phần tử khỏi list.
– Nếu bạn muốn xóa phần tử theo index, sử dụng hàm keyword del
Kết quả script list_modify.py

C:\Programs\Python\Python37>python.exe list_modify.py
['Frank', 'Alexis', 'Erika', 'Ludmila']
['Adriana', 'Frank', 'Alexis', 'Erika', 'Ludmila']
['Adriana', 'Ludmila']
['Ludmila']

Ví dụ: extend() và pop()
list_modify2.py

# list_modify2.py

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)

Hàm append() append list second vào list first. Để thay đổi phần tử trong list, chúng ta sử dụng toán tử gán. Hàm pop() lấy ra và trả về phần tử trong list.
Kết quả script list_modify2.py

C:\Programs\Python\Python37>python.exe list_modify2.py
[1, 2, 3, 4, 5, 6]
[11, 22, 33, 4, 5, 6]
6
[11, 22, 33, 4, 5]

Ví dụ: Tìm vị trí của phần tử

# list_index.py

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

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

Để tìm index của list, chúng ta dùng hàm index(x), với x là giá trị phần tử cần tìm index. Nếu phần tử xuất hiện nhiều lần trong list, hàm index() trả về vị trí phần tử đầu tiên.
Kết quả script list_index.py

C:\Programs\Python\Python37>python.exe list_index.py
1
3

Ví dụ: convert từ list sang tuple và ngược lại
list_transform.py

# list_transform.py

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

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

print(first)
print(second)

Chúng ta có thể sử dụng hàm tuple() để tạo tuple từ list và hàm list() để tạo list từ tuple.
Lưu ý rằng list và tuple ban đầu không bị thay đổi.

Kết quả script list_transform.py

C:\Programs\Python\Python37>python.exe list_transform.py
(1, 2, 3)
[4, 5, 6]
[1, 2, 3]
(4, 5, 6)

Kiểu set

Set là một tập hợp dữ liệu không có thứ tự, không có phần tử trùng lặp. Set support phép hợp, tương giao,.. tương tự như trong Toán học.
sets.py

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)

Trong ví dụ, Chúng ta sử dụng hàm set () để tạo các set.
– Phép toán giao nhau trả về các phần tử nằm trong set1 và set2.
– Phép toán hội trả về tất cả các phần tử từ cả hai set1 và set2.
– Phép toán – trả về các phần tử nằm trong set1 nhưng không nằm trong set2.
– Và cuối cùng, Phép toán ^ trả về các phần tử nằm trong set1 hoặc set2, nhưng không nằm trong cả hai.
Kết quả script sets.py

C:\Programs\Python\Python37>python.exe ets.py
set1:  {'c', 'a', 'b', 'd'}
set2:  {'z', 'y', 'a', 'x', 'b'}
intersection:  {'a', 'b'}
union:  {'z', 'y', 'a', 'x', 'c', 'd', 'b'}
difference:  {'c', 'd'}
symmetric difference:  {'z', 'y', 'x', 'c', 'd'}

Ví dụ: Các phép toán khác của set
set2.py

# sets2.py

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)

– Hàm add() thêm phần tử vào set.
– Hàm remove() xóa một phần tử của set.
– Hàm clear() xóa tất cả các phần tử set.
– Set1 là set cha của set2 nếu mọi phần tử trong set2 cũng nằm trong set1.
– Set1 là set con của set2 nếu mọi phần tử trong set1 cũng nằm trong set2.
Kết quả script set2.py

C:\Programs\Python\Python37>python.exe set2.py
{1, 2, 3, 4}
{1, 2, 3, 4, 6, 7}
Is set1 subset of set2 ? : True
Is set1 superset of set2 ? : False
set()

Nếu bạn muốn tạo 1 hằng set, gọi hàm frozenset() để tạo frozen set (set đóng băng ^^ )

fs = frozenset(['a', 'b', 'c'])

Kiểu dictionary

Kiểu dictionary trong python là 1 nhóm cặp key-value. Mỗi phần tử trong dictionary được truy vấn bằng key. Key trong dictionary phải là duy nhất. Vì kiểu dữ liệu dictionary quan trọng, chúng ta giành riêng 1 bài để tìm hiểu về dictionary.

dictionary_simple.py

# dictionary_simple.py

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ụ này đưa ra vài ứng dụng cơ bản của kiểu dữ liệu dictionary: in value, key, key và value of dictionary. Hàm item() trả về danh sách cặp (key, value) giống như tuple.

Kết quả script dictionary_simple.py

C:\Programs\Python\Python37>python.exe dictionary_simple.py
Haus
dict_keys(['girl', 'house', 'death'])
dict_values(['Maedchen', 'Haus', 'Tod'])
dict_items([('girl', 'Maedchen'), ('house', 'Haus'), ('death', 'Tod')])
Maedchen
{'house': 'Haus', 'death': 'Tod'}
{}

Be the first to comment

Leave a Reply