String, List và Tuple

String, ListTuple là 3 kiểu dữ liệu khác nhau trong Python tuy nhiên chúng đều được xếp chung vào kiểu dữ liệu Sequence.

Kiểu Dữ Liệu Sequence

Sequence (phiên âm đọc /xơ.cơ-u-ờn.xì/) là kiểu dữ liệu bao gồm một tập hợp (hay collection) các thành phần (member) bên trong nó.

sequence_type_1 = ("one", "two", "three", "four", "five", "six", "seven")
sequence_type_2 = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
sequence_type_3 = "Hello Python"

Chúng ta có thể truy cập giá trị của các phần tử thông qua thứ tự (index) của chúng trong sequence:

# Phần tử đầu tiên
print(sequence_type_1[0]) # Hiển thị: one
# Phần tử thứ 2
print(sequence_type_1[1]) # Hiển thị: two
# Phần tử cuối cùng
print(sequence_type_1[6]) # Hiển thị: seven
print(sequence_type_1[-1]) # Hiển thị: seven

Cặp dấu ngoặc vuông [] ở trên được dùng để lấy ra giá trị phần tử trong sequence còn được gọi là toán tử subscript operator.

Lưu ý: Phần tử đầu tiên trong sequence được đánh số thứ tự là 0, để truy cập phần tử cuối cùng thì chúng ta có thể dùng số thứ tự là -1.

Lấy từ phần tử thứ n tới phần tử thứ m trong sequence:

print(sequence_type_1[0:2]) # Hiển thị: ('one', 'two')

Đếm số lượng các phần tử có trong sequence chúng ta sử dụng hàm len() (tôi xin được nhắc lại một lần nữa về hàm, cách định nghĩa & sử dụng hàm sẽ được giới thiệu ở các bài học sau):

print(len(sequence_type_1)) # 7

Sử dụng vòng lặp for..in để lặp qua từng phần tử trong sequence (chi tiết về cách sử dụng vòng lặp sẽ được đề cập ở các bài học sau):

# Lặp qua từng phần tử trong sequence_type_2 và hiển thị giá trị từng phần tử
for num in sequence_type_2:
    print(num / 10)
# Hiển thị: 1 2 3 4 5 6 7 8 9 10

Để lặp qua từng phần tử đồng thời lấy ra số thứ tự của phần tử này chúng ta kết hợp sử dụng for..in và hàm enumerate():

# Lặp qua từng phần tử trong sequence_type_1 và hiển thị số thứ tự cùng giá trị từng phần tử
for index, num in enumerate(sequence_type_1):
    print("Index:", index, "Value:", num)

Khi chạy đoạn code phía trên Python sẽ hiển thị kết quả như sau:

Index: 0 Value: one
Index: 1 Value: two
Index: 2 Value: three
Index: 3 Value: four
Index: 4 Value: five
Index: 5 Value: six
Index: 6 Value: seven

Để đếm số lần xuất hiện của một giá trị trong sequence chúng ta sử dụng method .count():

print(sequence_type_1.count("five")) # Hiển thị: 1
print(sequence_type_3.count("l")) # Hiển thị: 2

Một method hoạt động tương tự như một hàm, tuy nhiên khác với hàm thì chúng ta không sử dụng method một cách độc lập mà method luôn đi cùng với một giá trị nào. Điều này thể biện bằng việc method luôn được theo sau một giá trị nào đó và ngăn cách bởi dấu chấm (.). Chúng ta cũng sẽ tìm hiểu chi tiết về method ở các bài học sau.

Để kiểm tra vị trí của một giá trị trong sequence chúng ta sử dụng method .index():

print(sequence_type_1.index("five")) # Hiển thị: 4

Lưu ý: Các member trong dữ liệu kiểu sequence còn được gọi với các thuật ngữ khác nhau như phần tử (element) hoặc hạng tử (term).

Kiểu Dữ Liệu String

Như đã trình bày ở các bài học trước đây, kiểu dữ liệu string bao gồm tập hợp các ký tự và thường được đặt bên trong cặp dấu nháy đơn hoặc cặp dấu nháy kép.

greeting = "Hello World!"
print(type(greeting)) # Hiển thị: <type 'str'>

Để đếm số lượng ký tự trong string chúng ta sử dụng hàm len():

print(len(greeting)) # Hiển thị: 12

Hàm len() sẽ đếm tất cả các ký tự bao gồm cả các ký tự đặc biệt như ký tự trống (dấu cách khi gõ phím space bar), ký tự xuống dòng (\n), dấu tab (\t) nếu có trong chuỗi:

greeting = "Hello\n World\t!"
print(len(greeting)) # 14

Lấy từ ký tự thứ n tới ký tự thứ m trong chuỗi:

# Lấy 
greeting = "Hello World!"
print(greeting[1:2]) # Hiển thị: e

Để tìm thứ tự của một ký tự hoặc một tập hợp các ký tự trong string cho trước chúng ta sử dụng method .find():

print(greeting.find("H")) # Hiển thị: 0
print(greeting.find("o")) # Hiển thị: 4
print(greeting.find("lo")) # Hiển thị: 3

Để trả về một chuỗi chỉ gồm các ký tự in thường từ chuỗi cho trước chúng ta sử dụng method .lower():

greeting = "Hello World!"
print(greeting.lower()) # Hiển thị: hello world!

Tương tự chúng ta sử dụng method .upper() để trả về một chuỗi các ký tự in hoa lấy từ chuôi cho trước:

print(greeting.upper()) # Hiển thị: HELLO WORLD!

Lưu ý: Trong cả hai trường hợp trên thì giá trị của biến greeting vẫn giữ nguyên không thay đổi.

Lặp qua các ký tự trong chuỗi:

for char in greeting:
    print(char)
# Hiển thị:
# H
# e
# l
# l
# o

# W
# o
# r
# l
# d
# !

Kiểu Dữ Liệu Tuple

Kiểu dữ liệu tuple là một dạng sequence tuy nhiên khác với string, sử dụng tuple chúng ta có thể lưu trữ các kiểu dữ liệu khác nhau trong cùng một tập hợp.

Các phần tử của một tuple được đặt trong cặp dấu ngoặc ():

myTuple = (2017, "October", ["red","green", "blue"])

Biến myTupple ở trên có 3 phần tử với 3 kiểu dữ liệu khác nhau là Number, String và List (lít sẽ được giới thiệu ở phần ngay tiếp theo đây).

Nếu tupe chỉ gồm một phần tử thì chúng ta vẫn cần đặt dấu phảy phía sau phần tử duy nhất:

aTuple = (100,)
print(type(aTuple)) #<type 'tuple'>
anInteger = (100)
print(type(anInteger)) # <type 'int'>

Sử dụng toán tử subcript ([]) với kiểu dữ liệu tupple:

print(myTuple[0]) # Hiển thị: 2017
print(myTuple[0, 1]) # Hiển thị: (2017, 'October')
print(type(myTuple[0, 1])) # Hiển thị: <type 'tuple'>

Để đếm số lượng phần tử trong tuple chúng ta dùng hàm len():

print(len(myTuple)) # 3

Kiểu Dữ Liệu List

Các phần tử của kiểu dữ liệu List được đặt bên trong []:

fruits = ["apple","banana", "orange"]
print(fruits[0])# Hiển thị: apple

Lấy từ phần tử thứ n tới phần tử thứ m trong list:

fruits = ["apple","banana", "kiwi", "orange"]
print(fruits[1:3]) # Hiển Thị: ['banana', 'kiwi']

Chúng ta cũng có thể tạo một list thông qua sử dụng hàm list() để liệt kê các phần tử của một string hoặc một tuple:

aString = "abc"
print(list(aString)) # ['a', 'b', 'c']
aTuple = (1, 2, 3)
print(list(aTuple)) # [1, 2, 3]

Để sắp xếp một list chúng ta sử dụng hàm sorted():

fruits = ["banana", "orange", "kiwi", "apple"]
print(sorted(fruits)) # ['apple', 'banana', 'kiwi', 'orange']
print(fruits) # ['banana', 'orange', 'kiwi', 'apple']

Ở trên hàm sorted() trả về một list mới với các phần tử được sắp xếp theo thứ tự chữ cái đầu tiên a->z. Hàm sorted() trên không làm thay đổi thứ tự của các phần tử trong list fruits ban đầu.

Chúng ta cũng có thể sử dụng sorted() trên kiểu number:

numbers = [10.2, 5, 2, 3]
print(sorted(numbers)) # [2, 3, 5, 10.2]

Ngoài ra chúng ta cũng có thể sử dụng hàm sorted() trên kiểu dữ liệu string hay kiểu tuple:

aString = "axcbzy"
print(sorted(aString)) # ['a', 'b', 'c', 'x', 'y', 'z']
aTuple = (8, 22, 13, 1, 15)
print(sorted(aTuple)) # [1, 8, 13, 15, 22]

Bạn cũng lưu ý rằng kết quả trả về từ việc sử dụng hàm sorted() một tuple là một list thay vì một tuple như bạn thấy ở ví dụ trên đây.

Mutable và Immutable

Khác với string hay tupple chúng ta có thể thay đổi giá trị của các phần tử trong list:

fruits[2] = "lemon"
print(colors[0]) # Hiển thị: ['apple', 'banana', 'lemon']

Chúng ta nói dữ liệu thuộc kiểu list có thể thay đổi được hay mutable. Ngược lại dữ liệu thuộc kiểu string và tupple không thể thay đổi được hay immutable.

Để thêm phần tử vào danh sách chúng ta sử dụng method .append():

fruits.append("orrange")
print(fruits) # Hiển thị: ['apple', 'banana', 'lemon', 'orrange']

Để xoá phần tử khỏi danh sách chúng ta có hai cách khác nhau là sử dụng hàm del() hoặc method .remove():

fruits = ["apple", "banana", "lemon", "orrange", "banana"]
# Xoá phần tử đầu tiên có giá trị là "banana"
fruits.remove("banana")
print(fruits) # Hiển thị: ['apple', 'lemon', 'orrange', 'banana']
# Xoá phần tử cuối cùng
del(fruits[-1])
print(fruits) # Hiển thị: ['apple', 'lemon', 'orrange']
# Xoá 2 phần tử tính từ phần tử đầu tiên
del(fruits[0:2])
print(fruits) # Hiển thị: ['orrange']

Ngoài ra thì dữ liệu kiểu list cũng có các method đặc trưng của sequence như .index() hay .count().

Nội dung không được để trống

Hướng Dẫn Liên Quan