Các loại cấu trúc trong Python là gì?

Bạn đã học cách làm khá nhiều thứ bằng Python trong ba chương đầu tiên. Bạn đã thấy hầu hết mọi thứ xảy ra trong một chương trình máy tính có thể được phân loại thành lưu trữ, lặp lại, quyết định hoặc tái sử dụng như thế nào. Trong Chương này, bạn sẽ tập trung vào danh mục cửa hàng. Bạn sẽ tìm hiểu thêm về các loại dữ liệu và lý do tại sao mọi thứ không phải lúc nào cũng đơn giản như với các ví dụ mà bạn đã thấy cho đến nay

Mô tả đơn giản nhất về chương trình máy tính là mô tả sau

Một chương trình máy tính lưu trữ dữ liệu và nó thực hiện công việc với dữ liệu đó

Cấp, đây không phải là định nghĩa kỹ thuật và chi tiết nhất mà bạn sẽ tìm thấy, nhưng nó tóm tắt một chương trình một cách hoàn hảo. Bạn cần thông tin trong bất kỳ chương trình máy tính nào. Và sau đó bạn cần phải làm gì đó với thông tin đó

Không có chương trình máy tính nào có thể tồn tại nếu không có dữ liệu. Dữ liệu có thể là một tên hoặc số đơn giản như trong trò chơi Angry Goblin hoặc bạn có thể có một bộ dữ liệu rất phức tạp và có cấu trúc cao. Và nếu bạn đang sử dụng ngôn ngữ lập trình, bạn sẽ muốn thực hiện một số thao tác với dữ liệu và chuyển đổi nó theo cách này hay cách khác

Quyết định cách bạn muốn chương trình của mình lưu trữ dữ liệu là một quyết định quan trọng mà bạn cần phải thực hiện với tư cách là một lập trình viên. Các ngôn ngữ như Python cung cấp nhiều lựa chọn thay thế để bạn cân nhắc. Trong Chương này, bạn sẽ đọc về cách các kiểu dữ liệu được xử lý trong Python và về các loại kiểu dữ liệu khác nhau

Phần đầu của Chương này sẽ trình bày một số lý thuyết liên quan đến kiểu dữ liệu. Trong phần thứ hai, bạn sẽ làm việc trong một dự án mới, trong đó bạn sẽ tìm ra tất cả các từ mà Jane Austen đã sử dụng khi viết Kiêu hãnh và Định kiến ​​và tần suất cô ấy sử dụng mỗi từ đó. Bạn có thể đoán năm từ phổ biến nhất trong Pride and Prejudice không?

Một số danh mục kiểu dữ liệu

Bạn đã bắt gặp một số loại dữ liệu quan trọng nhất trong Python. Bạn đã sử dụng số nguyên và số float, chuỗi, Booleans và danh sách. Còn rất nhiều kiểu dữ liệu khác trong Python. Nhiều hơn nữa

Khi bạn tìm hiểu về nhiều loại dữ liệu hơn, sẽ rất hữu ích nếu bạn tìm hiểu về các danh mục của loại dữ liệu. Điều này là do một số loại dữ liệu có thể có các thuộc tính tương tự và khi bạn biết cách xử lý một danh mục loại dữ liệu, bạn sẽ được trang bị tốt hơn để xử lý một loại dữ liệu mới mà bạn sẽ gặp phải từ cùng một danh mục

Trong phần này, bạn sẽ tìm hiểu về trình tự, lặp lại, kiểu dữ liệu có thể thay đổi và không thể thay đổi. Đừng để bị trì hoãn bởi từ ngữ tối nghĩa. Giống như mọi ngành nghề khác, các lập trình viên thích sử dụng những từ nghe có vẻ phức tạp để làm cho chủ đề trở nên khó hiểu và khó nắm bắt. Không thể thay đổi nghe không hoành tráng bằng bất biến. Mục đích của tôi trong cuốn sách này là ngược lại, nhưng chúng tôi không thể thoát khỏi việc sử dụng các thuật ngữ mà bạn sẽ tìm thấy trong tài liệu, thông báo lỗi và các văn bản khác

Các kiểu dữ liệu có thể lặp lại

Bạn đã sử dụng phép lặp trong Python. Khi bạn lặp lại một khối mã nhiều lần bằng vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5, bạn đang lặp lại khối mã đó. Bạn sẽ thường nghe nói về lần lặp đầu tiên hoặc lần lặp thứ hai của một vòng lặp, để chỉ một trong các lần lặp lại

Một kiểu dữ liệu có thể lặp lại nếu Python có thể lần lượt duyệt qua các mục trong kiểu dữ liệu đó, chẳng hạn như trong vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5. Ví dụ: bạn có thể thử nghiệm các loại dữ liệu mà bạn đã gặp cho đến nay

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]

Bạn sẽ nhớ lại rằng bạn luôn có thể kiểm tra kiểu dữ liệu bằng cách sử dụng hàm

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
7

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]

Đầu ra bạn sẽ nhận được từ việc in các kiểu dữ liệu cho năm biến này là






Bạn đã quen thuộc với bốn điều đầu tiên trong số này. Bạn sẽ nhớ lại rằng bạn đã sử dụng hàm

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
8 khi lần đầu tiên tìm hiểu về vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5. Ví dụ, để lặp lại một số mã mười lần, bạn đã viết

________số 8

Mã này sẽ chỉ in ra các số từ 0 đến 9. Bây giờ bạn đã biết thêm về các hàm, bạn sẽ nhận ra

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
8 là một hàm. Tất cả các hàm trả về một số dữ liệu khi chúng thực hiện xong. Biến
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
01 thu thập dữ liệu này. Hàm
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
8 không trả về một danh sách, như bạn có thể mong đợi. Thay vào đó, nó trả về một kiểu dữ liệu khác được gọi là đối tượng
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
03. Hiện tại, chúng tôi sẽ không lo lắng quá nhiều về loại dữ liệu này, nhưng tôi đã đưa nó vào đây vì đây là loại bạn đã gặp rồi

Đoạn mã sau giống với vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 mà bạn đã viết ở trên, vì
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
01 chứa dữ liệu được trả về từ
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
06

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
6

Bạn có thể khám phá loại dữ liệu nào có thể lặp lại bằng cách thử sử dụng từng biến trong vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
8

Biến

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
08 là một
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
09 và khi bạn cố gắng sử dụng nó trong vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5, bạn sẽ nhận được thông báo lỗi sau

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
2

Dòng cuối cùng của thông báo lỗi có tất cả thông tin bạn cần. Lỗi là một

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
11. Đã xảy ra lỗi với kiểu dữ liệu. Thông báo lỗi sau đó đi xa hơn bằng cách làm rõ đối tượng
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
09 không thể lặp lại. Do đó, một mục dữ liệu là một số nguyên không thể được sử dụng như một chuỗi có thứ tự trong vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5

Bạn sẽ nhận được thông báo lỗi tương tự khi thử kiểu dữ liệu

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
14. Một float cũng không thể lặp lại. Tuy nhiên, danh sách và chuỗi đều có thể lặp lại, như các ví dụ sau cho thấy

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
7

Bạn sẽ không gặp lỗi khi nói rằng các loại dữ liệu này không thể lặp lại trong trường hợp này

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
8

Khi bạn lặp qua một chuỗi, mỗi ký tự được xem xét một lần. Vì vậy, biến

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
15 sẽ chứa chữ cái
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
16 trong lần lặp đầu tiên của vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5, sau đó là
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
18 trong lần lặp thứ hai, v.v.

Bạn có thể nhận thấy rằng bạn đã sử dụng biến

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
15 trong cả hai vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5. Điều này là tốt miễn là bạn chỉ cần sử dụng biến này trong vòng lặp. Khi chương trình máy tính chạy đến vòng lặp thứ hai, nó sẽ ghi đè lên bất kỳ thứ gì đã có trong biến
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
15 bằng các giá trị mới. Bạn đang sử dụng lại cùng một hộp để tiết kiệm phải lấy một hộp mới

Trong câu lệnh lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5, bạn không nhất thiết phải sử dụng tên biến ở cuối dòng. Bạn đã thấy cách bạn có thể sử dụng một hàm chẳng hạn như
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
8. Miễn là hàm trả về kiểu dữ liệu có thể lặp lại, nó có thể được sử dụng trực tiếp trong câu lệnh vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5. Bạn thậm chí có thể sử dụng trực tiếp cấu trúc dữ liệu, ví dụ

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]

Một loại khác của kiểu dữ liệu là dãy. Trình tự là một kiểu dữ liệu đã sắp xếp các mục bên trong nó. Ví dụ, bạn đã thấy cách chúng ta có thể sử dụng lập chỉ mục trên cả danh sách và chuỗi—cả hai trình tự—để trích xuất một mục từ một vị trí cụ thể

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
0

Có rất nhiều sự trùng lặp giữa các loại dữ liệu là chuỗi và dữ liệu có thể lặp lại. Hiện tại, bạn muốn coi hai danh mục này giống nhau cũng không sao, nhưng để hoàn thiện, tôi sẽ làm rõ rằng chúng không giống nhau. Có một số kiểu dữ liệu có thể lặp lại không phải là chuỗi

Các kiểu dữ liệu có thể thay đổi và không thể thay đổi

Hãy tiếp tục sử dụng danh sách và chuỗi trong phần này. Bạn đã thấy rằng cả hai loại dữ liệu này đều có thể lặp lại và chúng là các chuỗi. Trong ví dụ mã cuối cùng trong phần trước, bạn đã thấy cách bạn có thể trích xuất một mục từ danh sách hoặc chuỗi dựa trên vị trí trong cấu trúc dữ liệu

Bây giờ bạn có thể thử gán lại một giá trị mới cho một vị trí nhất định. Hãy bắt đầu với danh sách

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
1

Ở dòng thứ hai, bạn đã chỉ định lại những gì đang được lưu trữ ở vị trí thứ ba trong danh sách, vì chỉ số

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
25 đề cập đến vị trí thứ ba trong danh sách. Bất kỳ giá trị nào được lưu trữ ở vị trí thứ ba của danh sách đã bị loại bỏ và thay thế bằng
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
26. Khi bạn hiển thị lại danh sách, bạn có thể thấy rằng giá trị
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
27, ở vị trí thứ ba trong danh sách, không còn nữa. Giá trị
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
26 ở vị trí của nó

Bây giờ bạn có thể thử làm điều tương tự với một chuỗi

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
2

Thủ thuật hiệu quả với danh sách không hoạt động với chuỗi. Bạn lại nhận được một

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
11. Chuỗi là kiểu dữ liệu không thay đổi. Điều này có nghĩa là khi chúng đã được tạo, bạn không thể thực hiện thay đổi trong chuỗi. Các loại dữ liệu bất biến dành cho thông tin không cần thay đổi sau khi được tạo

Danh sách có thể thay đổi, có nghĩa là chúng là các thùng chứa linh hoạt có thể thay đổi. Bạn có thể thêm các mục mới vào danh sách hoặc thay thế các mục hiện có. Các kiểu dữ liệu có thể thay đổi là lý tưởng cho dữ liệu có khả năng thay đổi trong khi chương trình đang chạy

Lưu ý rằng ngay cả với kiểu dữ liệu không thay đổi, bạn vẫn được phép ghi đè lên toàn bộ biến. Vì vậy, nếu tôi muốn thay đổi chữ cái thứ ba trong tên của mình thành

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
30, tôi cần thực hiện như sau

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
3

Trong trường hợp này, bạn đã gán lại dữ liệu mới cho biến

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
31. Bạn không sửa đổi một chuỗi hiện có, nhưng bạn đang loại bỏ chuỗi cũ và thay thế nó bằng một chuỗi mới mà bạn gán cho cùng một tên biến. Trong phần tiếp theo, bạn sẽ thấy việc hiểu được sự khác biệt giữa các loại dữ liệu có thể thay đổi và không thể thay đổi có thể giúp giải thích các hành vi khác thoạt nhìn có vẻ kỳ quặc như thế nào

Các phương thức liên kết với kiểu dữ liệu

Có rất nhiều thuật ngữ trong mã hóa. Đây là một thuật ngữ mới mà bạn chưa gặp phải cho đến nay. phương pháp. Nếu bạn biết hàm là gì và bạn đã làm từ Chương trước, bạn cũng biết phương thức là gì. Phương thức là một hàm được liên kết với một kiểu dữ liệu cụ thể và hoạt động trên kiểu dữ liệu đó. Mô tả này sẽ có nhiều ý nghĩa hơn với một số ví dụ

Hãy bắt đầu với các chức năng tiêu chuẩn. Bạn đã thấy

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
32 và
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
8 là các hàm. Chúng được viết bằng chữ thường và có dấu ngoặc đơn ở cuối. Các hàm có thể có các đối số trong ngoặc đơn và chúng trả về dữ liệu khi chúng hoàn thành hành động của mình

Bạn cũng đã thấy một phương pháp được sử dụng trong Chương trước. Khi bạn tạo một danh sách và sau đó bạn muốn thêm các mục vào danh sách, bạn đã sử dụng

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
34. Hãy nhớ cách bạn có thể sử dụng
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
34

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
4

Giá trị

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
36 đã được thêm vào cuối danh sách. Lưu ý rằng bạn không viết
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
34 như một chức năng độc lập, như bạn sẽ sử dụng
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
32, chẳng hạn. Thay vào đó, bạn đã gắn nó vào tên biến với dấu chấm hoặc dấu chấm. Tên
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
34 tất cả đều là chữ thường và theo sau nó là dấu ngoặc đơn giống như trường hợp của tất cả các hàm. Giá trị
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
36 là đối số được truyền vào hàm này. Khi một hàm được liên kết với một kiểu dữ liệu và được gắn với nó bằng dấu chấm hết, chúng ta gọi đó là một phương thức

Các phương thức hoạt động giống như các hàm. Sự khác biệt duy nhất là ngoài bất kỳ dữ liệu nào được bao gồm trong ngoặc đơn làm đối số, các phương thức cũng có quyền truy cập trực tiếp vào dữ liệu được lưu trữ trong đối tượng mà chúng được gắn vào. Trong ví dụ trên, phương pháp

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
34 đã lấy danh sách được lưu trữ trong
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
42, tìm vị trí có sẵn tiếp theo trong danh sách và thêm giá trị
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
36 vào danh sách đó

Nếu bạn đang sử dụng một IDE chẳng hạn như PyCharm, thì bây giờ bạn sẽ nhận thấy rằng các công cụ này có tính năng tự động hoàn thành để giúp bạn viết mã dễ dàng hơn. Nếu bạn bắt đầu nhập

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
44, IDE sẽ hiển thị cho bạn
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
32 và bạn chỉ cần nhấn Enter/Return để chấp nhận tự động hoàn thành. Bạn có thể nhận thấy rằng khi bạn nhập một tên biến theo sau là dấu chấm hoặc dấu chấm, IDE của bạn sẽ hiển thị cho bạn danh sách các tên có sẵn để bạn sử dụng. Bạn sẽ tìm thấy tất cả các phương pháp bạn có thể sử dụng được liệt kê tại đây

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
42 là một danh sách, khi bạn nhập dấu chấm, bạn sẽ thấy tất cả các phương thức được liên kết với danh sách. Bất cứ khi nào bạn có một danh sách, bạn sẽ luôn có quyền truy cập vào các phương thức danh sách

Hãy xem xét thêm một vài phương pháp danh sách

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
5

Danh sách

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
42 có giá trị
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
48 được lưu trữ ở vị trí thứ tư. Phương thức
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
49 đã xóa giá trị này. Nếu bạn muốn xóa một giá trị theo vị trí trong danh sách, thay vì theo giá trị, bạn có thể sử dụng phương pháp
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
50

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
6

Bạn đã xóa mục đầu tiên khỏi danh sách bằng cách sử dụng chỉ mục

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
51 làm đối số trong
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
50. Phương thức này không chỉ thay đổi danh sách ban đầu mà còn trả về giá trị đã bị loại bỏ. Phương thức này đang lấy một giá trị ra khỏi danh sách mà bạn có thể lưu trữ riêng trong một biến khác nếu muốn

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
7

Lưu ý rằng khi bạn đang sử dụng cùng một danh sách nhiều lần, danh sách hiện đang bị thu hẹp khi bạn đã sử dụng

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
49 một lần và
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
50 hai lần rồi. Bây giờ hãy xem xét một phương pháp danh sách cuối cùng. Trước tiên, bạn có thể thêm một giá trị bổ sung vào danh sách

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
8

Phương thức

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
55 đếm số lần giá trị trong ngoặc nằm trong danh sách. Vì có hai lần xuất hiện của giá trị
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
56, phương thức này trả về giá trị
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
25

Các phương thức này là các phương thức danh sách. Chúng được xác định để làm việc trên danh sách. Bây giờ chúng ta hãy xem xét một số phương thức chuỗi

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
9

Như trước đây với danh sách, nếu bạn đang sử dụng IDE và bạn nhập tên của chuỗi theo sau là dấu chấm hoặc dấu chấm, bạn sẽ thấy tất cả các phương thức được liên kết với chuỗi

Xem lại các kiểu dữ liệu có thể thay đổi và không thể thay đổi

Hãy quay lại những ví dụ cuối cùng mà bạn đã thử






0

Biến

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
31 không thay đổi khi bạn sử dụng phương pháp
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
59. Bạn có thể thử điều này với các phương thức chuỗi khác mà bạn đã sử dụng ở trên và bạn sẽ nhận thấy mẫu tương tự

Phương thức

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
59 và các phương thức chuỗi khác trả về một bản sao của chuỗi nhưng chúng không thay đổi biến ban đầu. Tuy nhiên, đây không phải là trường hợp với các phương pháp danh sách. Hãy xem một ví dụ bạn đã sử dụng ở trên

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
4

Phương pháp danh sách

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
34 không thay đổi dữ liệu gốc được lưu trữ trong biến. Thoạt nhìn, hành vi khác nhau này giữa các phương thức chuỗi và phương thức danh sách có vẻ như là một điều bất thường. Trong một trong các bộ phương thức, các phương thức sửa đổi dữ liệu gốc, trong khi ở bộ kia, các phương thức không thực hiện bất kỳ thay đổi nào mà thay vào đó trả về một bản sao

Tuy nhiên, có một lý do khiến phương thức chuỗi và phương thức danh sách hoạt động khác nhau. Chuỗi là bất biến. Chúng không có nghĩa là thay đổi sau khi chúng được tạo. Vì lý do này, các phương thức chuỗi không sửa đổi chuỗi gốc mà thay vào đó trả về một bản sao

Nếu bạn muốn thay thế chuỗi cũ bằng chuỗi mới được phương thức trả về, bạn sẽ phải thực hiện điều đó một cách rõ ràng






2

Bạn chỉ định bản sao của chuỗi được trả về bởi

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
59 cho cùng một tên biến
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
31. Do đó, bạn đang ghi đè lên biến ban đầu. Bước bổ sung này buộc bạn, người lập trình, phải chịu trách nhiệm về hành động này. Bạn đang xác nhận rằng bạn muốn thay thế chuỗi bằng chuỗi mới

Vì danh sách có thể thay đổi nên các phương thức của chúng hoạt động trực tiếp trên dữ liệu gốc. Một lỗi phổ biến xảy ra trong các chương trình khi một lập trình viên quên đi sự khác biệt này và sử dụng phép gán lại trên các phương thức danh sách hoặc không sử dụng phép gán lại khi sử dụng các phương thức chuỗi nhưng sau đó mong đợi biến chứa dữ liệu mới

Cấu trúc dữ liệu

Bạn đã gặp một số loại dữ liệu rồi. Một số kiểu dữ liệu, được gọi là cấu trúc dữ liệu, lưu trữ một tập hợp các giá trị. Python có ba cấu trúc dữ liệu cơ bản. Bạn đã sử dụng một trong số này, danh sách. Danh sách là một chuỗi và có thể lặp lại, đồng thời có thể thay đổi. Bạn sẽ sớm tìm hiểu về hai cấu trúc dữ liệu cơ bản khác trong Python. bộ dữ liệu và từ điển

Python có nhiều loại dữ liệu khác, bao gồm cả cấu trúc dữ liệu. Trong phần thứ hai của cuốn sách này, bạn sẽ tìm hiểu về các cấu trúc dữ liệu nâng cao hơn được sử dụng để xử lý các bộ dữ liệu định lượng trong khoa học, tài chính và các lĩnh vực dựa trên dữ liệu khác

bộ dữ liệu

Cấu trúc dữ liệu cơ bản thứ hai của Python là bộ dữ liệu. Bạn có một sự lựa chọn về cách phát âm này. Một số phát âm thuật ngữ này là tup-el, vần với cặp đôi. Những người khác phát âm nó như hai viên thuốc. Mặc dù tuple không phải là một từ tiếng Anh thông dụng—nó là một thuật ngữ xuất hiện trong toán học—nó có cùng gốc xuất hiện ở cuối các từ như triple, quadruple hoặc multiple. Và bạn sẽ sớm thấy liên kết giữa tuple và những từ này

Bạn có thể tạo một bộ theo cách tương tự như cách tạo một danh sách. Tuy nhiên, loại dấu ngoặc được liên kết với bộ dữ liệu là dấu ngoặc đơn thay vì dấu ngoặc vuông






3

Bạn có thể tạo một danh sách có cùng các số để bạn có thể khám phá sự khác biệt và tương đồng giữa danh sách và bộ dữ liệu






4

Bộ dữ liệu cũng là trình tự và bạn có thể sử dụng lập chỉ mục và cắt trên bộ dữ liệu giống như cách bạn thực hiện với danh sách






5

Lưu ý rằng khi bạn sử dụng lập chỉ mục hoặc cắt trên bất kỳ trình tự nào, bạn sẽ luôn sử dụng dấu ngoặc vuông ngay sau tên biến, ngay cả đối với các trình tự không phải là danh sách

Bạn có thể kiểm tra xem các bộ dữ liệu có thể lặp lại hay không bằng cách sử dụng bộ dữ liệu trong vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 và xem liệu bạn có gặp lỗi hay không






6

Bạn đã có thể lặp qua bộ dữ liệu

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
65 thành công. Điều này có nghĩa là các bộ dữ liệu có thể lặp lại

Bây giờ bạn có thể kiểm tra khả năng thay đổi. Bạn có thể so sánh việc gán lại giá trị cho một trong các mục trong bộ với trường hợp khi bạn đang sử dụng danh sách






7

Khi sử dụng danh sách chẳng hạn như

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
66, bạn có thể chỉ định lại một trong các mục danh sách. Tuy nhiên, nếu bạn cố làm điều tương tự với một tuple, bạn sẽ gặp lỗi






8

Đây là lỗi tương tự mà bạn gặp phải khi cố gán lại một chữ cái mới thành một chuỗi. Bộ dữ liệu, giống như chuỗi, là bất biến. Một tuple là một dãy bất biến

Tại thời điểm này, bạn có thể tự hỏi tại sao bạn lại cần các bộ dữ liệu. Chúng có vẻ giống như danh sách nhưng có ít tính năng hơn. Tuy nhiên, khi bạn muốn tạo một chuỗi các mục và bạn biết rằng chuỗi này sẽ không thay đổi trong mã của bạn, thì việc tạo một bộ là tùy chọn an toàn hơn. Nó ít có khả năng mã của bạn sẽ vô tình thay đổi một giá trị trong bộ dữ liệu, vì nếu mã của bạn cố gắng làm như vậy, bạn sẽ gặp lỗi. Sử dụng một bộ khi bạn biết dữ liệu sẽ không thay đổi có nghĩa là bạn ít có khả năng đưa ra các lỗi trong mã của mình

Bộ dữ liệu cũng hiệu quả hơn về bộ nhớ so với danh sách, nhưng hiện tại bạn không cần phải lo lắng về vấn đề bộ nhớ

Mặc dù dấu ngoặc tròn hoặc dấu ngoặc đơn là loại dấu ngoặc được liên kết với bộ dữ liệu, nhưng bạn cũng có thể bỏ qua dấu ngoặc đơn hoàn toàn khi tạo bộ dữ liệu






9

Cũng giống như danh sách, bạn có thể lưu trữ bất kỳ loại dữ liệu nào trong một bộ, bao gồm các cấu trúc dữ liệu khác

for item in range[10]:
    print[item]
0

Tuple này chứa sáu mục

  • một
    print[type[a_number]]
    print[type[another_number]]
    print[type[my_name]]
    print[type[many_numbers]]
    print[type[more_numbers]]
    09
  • một
    print[type[a_number]]
    print[type[another_number]]
    print[type[my_name]]
    print[type[many_numbers]]
    print[type[more_numbers]]
    68
  • một
    print[type[a_number]]
    print[type[another_number]]
    print[type[my_name]]
    print[type[many_numbers]]
    print[type[more_numbers]]
    69
  • một
    print[type[a_number]]
    print[type[another_number]]
    print[type[my_name]]
    print[type[many_numbers]]
    print[type[more_numbers]]
    70
  • một
    print[type[a_number]]
    print[type[another_number]]
    print[type[my_name]]
    print[type[many_numbers]]
    print[type[more_numbers]]
    71
  • một
    print[type[a_number]]
    print[type[another_number]]
    print[type[my_name]]
    print[type[many_numbers]]
    print[type[more_numbers]]
    14

Tạm thời bạn không cần lo lắng về việc nên dùng list hay tuple. Tuy nhiên, bạn sẽ bắt gặp các bộ dữ liệu khi viết mã vì Python thường sử dụng cấu trúc dữ liệu này

từ điển

Cấu trúc dữ liệu cơ bản thứ ba là từ điển. Hãy tưởng tượng bạn cần lưu trữ điểm kiểm tra của học sinh trong một lớp. Bạn có thể làm điều này với hai danh sách

for item in range[10]:
    print[item]
1

Miễn là tên và kết quả kiểm tra được lưu trữ theo cùng một thứ tự, thì bạn có thể trích xuất các giá trị ở cùng vị trí trong mỗi danh sách. Ví dụ: nếu bạn trích xuất mục thứ hai trong mỗi danh sách, bạn sẽ có tên

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
73 và kết quả kiểm tra của cô ấy,
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
74

Mặc dù bạn có thể làm điều này, nhưng nó không lý tưởng. Nếu bạn muốn tìm điểm của Mark, trước tiên bạn cần tìm vị trí của Mark trong danh sách và sau đó lấy giá trị ở vị trí tương tự trong danh sách thứ hai. Và điều gì sẽ xảy ra nếu Trevor rời trường và cần bị xóa khỏi danh sách. Bạn sẽ cần đảm bảo rằng cả tên và nhãn hiệu của anh ấy đều bị xóa khỏi hai danh sách riêng biệt. Mọi thứ sẽ càng phức tạp hơn nếu bạn cần lưu trữ điểm kiểm tra của nhiều môn học cho mỗi học sinh thay vì chỉ lưu trữ điểm kiểm tra của một môn học.

Trong trường hợp tương tự của White Room, bạn đang tạo hai hộp riêng biệt, một nhãn _______ 475 và nhãn kia ________ 476. Mặc dù bạn biết rằng hai hộp này có dữ liệu liên quan đến nhau, nhưng chương trình máy tính không biết các hộp này được liên kết với nhau. Có một cách tốt hơn để lưu trữ loại thông tin được liên kết này. từ điển

Bạn đã thấy dấu ngoặc vuông liên kết với danh sách và dấu ngoặc tròn với bộ dữ liệu như thế nào. May mắn thay, bạn vẫn còn nhiều loại dấu ngoặc trên bàn phím của mình. Đã đến lúc sử dụng dấu ngoặc nhọn. Bạn có thể tạo một từ điển với tất cả tên và điểm của học sinh

for item in range[10]:
    print[item]
2

Ngoài việc sử dụng dấu ngoặc nhọn, bạn sẽ nhận thấy một điểm khác biệt nữa khi tạo từ điển. Mỗi mục trong từ điển chứa hai phần được phân tách bằng dấu hai chấm. Từ điển

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
77 chứa sáu mục, không phải mười hai. Mục đầu tiên là cặp
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
78 và
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
79, v.v.

Phần đầu tiên của mỗi mục được gọi là chìa khóa. Phần thứ hai được gọi là giá trị. Vì vậy, trong mục đầu tiên của từ điển ở trên, khóa là

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
78 và giá trị là
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
79

Thứ tự của các mục trong từ điển không quan trọng. Điều này khác với danh sách, bộ dữ liệu và chuỗi, trong đó thứ tự của các mục là đặc điểm xác định của cấu trúc dữ liệu. Điều quan trọng trong từ điển là mối liên hệ giữa khóa và giá trị của nó. Nếu bạn cố gắng truy cập một mục từ từ điển bằng cách sử dụng cùng một chỉ mục mà bạn đã sử dụng cho danh sách, bộ dữ liệu và chuỗi, thì bạn sẽ gặp lỗi

for item in range[10]:
    print[item]
3

Cố gắng truy cập mục thứ ba trong từ điển không có ý nghĩa gì vì từ điển không phải là một chuỗi. Thay vào đó, chúng ta có thể sử dụng khóa để truy cập các giá trị từ trong từ điển

for item in range[10]:
    print[item]
4

Hãy xem liệu từ điển có thể thay đổi được không

for item in range[10]:
    print[item]
5

Câu trả lời là 'có'. Từ điển là một kiểu dữ liệu có thể thay đổi. Bạn đã thay đổi giá trị được liên kết với

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
73 thành
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
83. Bạn thậm chí có thể tăng giá trị trong từ điển

for item in range[10]:
    print[item]
6

Python sẽ xem xét những gì ở bên phải của toán tử gán

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
84 nơi nó sẽ đọc giá trị được liên kết với khóa
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
85. Sau đó, chương trình sẽ thêm
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
86 vào số nguyên
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
87. Kết quả sau đó được gán lại cho khóa
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
85

Điều gì xảy ra nếu bạn cố gắng truy cập vào giá trị của một khóa không tồn tại?

for item in range[10]:
    print[item]
7

Khóa

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
89 không tồn tại, vì vậy bạn nhận được một
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
90. Tuy nhiên, bạn có thể tạo một khóa mới nếu bạn gán một giá trị cho nó

for item in range[10]:
    print[item]
8

Bây giờ bạn có thể xem qua một số phương pháp mà bạn có thể sử dụng với từ điển. Bạn có thể bắt đầu với một vài phương pháp không thú vị lắm nhưng có thể rất hữu ích

for item in range[10]:
    print[item]
9

Một phương pháp hữu ích khác là

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
91 cho phép bạn lấy giá trị được liên kết với một khóa. Bạn đã có thể làm điều đó bằng cách sử dụng ký hiệu dấu ngoặc vuông,
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
92, như bạn đã thấy ở trên. Tuy nhiên,
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
91 không báo lỗi nếu bạn cố truy cập vào giá trị của khóa không tồn tại

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
60

Khi bạn sử dụng

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
85 làm đối số cho
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
91, phương thức này trả về giá trị
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
96. Tuy nhiên, không có gì được trả về khi đối số là khóa không tồn tại. Tuy nhiên, bạn cũng không nhận được
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
90. Đôi khi bạn có thể muốn mã của mình mạnh mẽ để nếu bạn cố truy cập vào một khóa không tồn tại, mã sẽ tiếp tục chạy mà không gây ra lỗi. Phương thức
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
91 cũng cho phép bạn đặt một giá trị mặc định để bạn có thể kiểm soát những gì phương thức trả về nếu khóa không tồn tại

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
61

Làm thế nào về các vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5?

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
62

Bạn không gặp lỗi, nhưng bạn có thể thấy rằng chỉ một số thông tin đã được lưu trữ trong biến






00. Khi bạn lặp qua một từ điển theo cách này, bạn đang lặp qua các khóa của từ điển. Có thể đôi khi bạn muốn làm điều này, nhưng trong hầu hết các trường hợp, khi bạn muốn lặp lại một từ điển, bạn sẽ muốn làm điều gì đó khác biệt. Bạn sẽ tìm hiểu về một cách lặp khác thông qua từ điển trong dự án mà bạn sẽ bắt đầu trong phần tiếp theo

Dự án Kiêu hãnh & định kiến. Phân tích tần số từ

Đã đến lúc bắt đầu thực hiện một dự án mới để củng cố nhiều điều bạn đã học được cho đến nay. Nhiệm vụ của bạn là đọc và phân tích Kiêu hãnh và Định kiến ​​của Jane Austen. Ngoại trừ, bạn sẽ không được đọc cuốn tiểu thuyết. Trong dự án này, bạn sẽ tìm thấy tất cả các từ mà Jane Austen đã sử dụng trong cuốn sách và tần suất mỗi từ được sử dụng

Tôi đã đề cập trước đó rằng bạn sẽ không đọc cuốn sách. Tuy nhiên, chương trình máy tính của bạn sẽ. Vì vậy, trước khi bắt đầu thực hiện dự án Kiêu hãnh & định kiến, bạn sẽ tìm hiểu cách đọc dữ liệu từ nguồn bên ngoài

Bạn sẽ cần tệp có tên






01 cho dự án này mà bạn có thể lấy từ Kho lưu trữ tệp sách viết mã Python. Bạn sẽ cần đặt tệp vào thư mục Dự án của mình

Tải xuống Kho lưu trữ tệp sách viết mã Python

Thông qua liên kết trên, bạn có thể tải trực tiếp thư mục mình cần về máy tính của mình. Tôi muốn giới thiệu tùy chọn này đơn giản nhất. Nhưng nếu thích, bạn cũng có thể truy cập kho lưu trữ thông qua Github

GHI CHÚ. Vì nội dung của Cuốn sách viết mã Python hiện đang được phát hành dần dần, kho lưu trữ này không phải là bản cuối cùng, vì vậy bạn có thể cần tải xuống lại trong tương lai khi có nhiều tệp hơn mà bạn sẽ cần trong các chương sau

Làm cho các tệp có thể truy cập vào dự án của bạn

Cách đơn giản nhất để đảm bảo bạn có thể truy cập tệp từ dự án Python của mình là đặt tệp đó vào thư mục dự án—cùng thư mục chứa tập lệnh Python của bạn. Nếu bạn đang sử dụng một IDE chẳng hạn như PyCharm, bạn có thể kéo tệp từ máy tính của mình vào thanh bên Dự án để di chuyển tệp.

Hoặc, bạn có thể định vị thư mục chứa tập lệnh Python trên máy tính của mình và chỉ cần di chuyển các tệp bạn cần vào thư mục đó giống như cách bạn di chuyển bất kỳ tệp nào khác trên máy tính của mình.

Mẹo. Trong PyCharm, nếu thanh bên Dự án đang mở, bạn có thể nhấp vào tên dự án [dòng trên cùng] và sau đó hiển thị menu ngữ cảnh bằng cách nhấp chuột điều khiển [Mac] hoặc nhấp chuột phải [Windows/Linux]. Một trong các tùy chọn sẽ là Reveal in Finder hoặc Show in Explorer tùy thuộc vào hệ điều hành bạn đang sử dụng.

Đọc dữ liệu từ tệp văn bản

Trong tất cả các chương trình bạn đã viết cho đến nay, tất cả dữ liệu bạn sử dụng là dữ liệu bạn nhập trực tiếp vào chương trình của mình. Điều này hiếm khi xảy ra trong cuộc sống thực. Trong nhiều ứng dụng mã hóa, chương trình của bạn sẽ cần quyền truy cập vào dữ liệu có sẵn ở một số dạng khác. Trong nửa sau của cuốn sách này, bạn sẽ dành nhiều thời gian xem xét nhiều cách khác nhau để nhập và truy cập dữ liệu từ các nguồn bên ngoài. Tại đây, bạn sẽ xem xét một trong những cách nhập dữ liệu cơ bản nhưng rất hữu ích. đọc từ một tập tin văn bản

Văn bản của cuốn sách nằm trong tệp văn bản






01. Đây là một tệp văn bản bình thường, bạn có thể nhấp đúp vào bất kỳ máy tính nào và mở và đọc bằng phần mềm tiêu chuẩn trên máy tính của bạn. Bạn sẽ cần đưa nội dung của tệp này vào môi trường Python của mình trước khi có thể bắt đầu làm việc với nó

Giống như bạn có thể mở tệp trong hệ điều hành của máy tính, bạn có thể mở tệp trong chương trình Python của mình. Đã đến lúc mở tập lệnh Python mới và bắt đầu

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
63

Hàm






03 là một hàm tích hợp thực hiện đúng như những gì nó nói. Tuy nhiên, bạn sẽ không thấy một cửa sổ mới mở ra giống như khi bạn bấm đúp vào tệp trên máy tính của mình. Bạn đã quen với khái niệm rằng nhiều hàm trả về một thứ gì đó trong phạm vi mà chúng được gọi. Vì vậy, hãy lưu trữ bất cứ thứ gì được trả về từ





03 trong một biến và xem nó là gì

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
64

Đầu ra từ mã này không hoàn toàn như những gì bạn có thể mong đợi

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
65

Bây giờ hãy bỏ qua điều này. Bạn có thể coi đối tượng được trả về từ






03 như một phần điều khiển của tệp mà bạn vừa mở. Kiểu dữ liệu của đối tượng này là





06. Tốt nhất là bỏ qua bất cứ điều gì có vẻ tối nghĩa và không thể đọc được trong thời điểm hiện tại. Thay vào đó, bạn có thể xem những việc bạn có thể làm với biến





07 bằng cách nhập biến đó vào tập lệnh của mình, sau đó là dấu chấm. Nếu bạn đang sử dụng một IDE chẳng hạn như PyCharm, bạn sẽ thấy một danh sách các phương thức xuất hiện để bạn lựa chọn. Một trong những phương pháp này là





08

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
66

Phương thức






08, bạn đã đoán ra, sẽ đọc nội dung của tệp. Bạn đã lưu trữ dữ liệu được trả về bởi





08 trong một biến khác





11 và khi bạn in





11, bạn sẽ thấy toàn bộ nội dung của tệp do mã của bạn xuất ra. Bạn có thể đoán kiểu dữ liệu





11 là gì

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
67

Bạn sẽ thấy rằng






08 trả về một chuỗi. Từ thời điểm này trở đi, nội dung của tệp văn bản được lưu trữ trong chương trình của bạn dưới dạng một trong những kiểu dữ liệu cơ bản nhất của Python. Bạn đã đưa dữ liệu từ thế giới bên ngoài vào chương trình Python của mình

Lưu ý rằng dòng đầu tiên và dòng cuối cùng của tệp văn bản không phải là một phần của cuốn sách mà là phần ghi công cho sách điện tử mã nguồn mở mà chúng tôi đang sử dụng này. Bạn có thể xóa những dòng này khỏi phiên bản của mình nếu muốn

Trước khi chúng tôi tiến hành, có một số công việc dọn phòng bạn cần làm. Bạn không bao giờ nên để một tệp mở lâu hơn mức cần thiết. Cách đơn giản nhất để giải quyết vấn đề này là đóng tệp sau khi bạn đã đưa dữ liệu vào một biến Python

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
68

Mặc dù mở và đóng tệp bằng cách sử dụng hàm tích hợp sẵn






03 và phương pháp





16 là cách đơn giản nhất, các phiên bản Python gần đây đã giới thiệu một cách tốt hơn để đảm bảo rằng không có tệp nào vẫn mở. Điều này sử dụng từ khóa





17

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
69

Đoạn mã trên đạt được mục tiêu giống như phiên bản trước. Tệp được tự động đóng sau khi mã trong khối






17 được thực thi. Vui lòng sử dụng bất kỳ tùy chọn nào bạn muốn trong thời gian này. Trong tương lai, bạn sẽ muốn chuyển sang sử dụng tùy chọn thứ hai, tùy chọn này phù hợp hơn

Dự án P&P. Đọc và làm sạch dữ liệu

Từ quan điểm của chương trình của bạn, tất cả những gì bạn có cho đến nay là một chuỗi duy nhất. Một chuỗi đơn rất dài. Những gì bạn lý tưởng cần là những từ riêng lẻ. Một trong các phương thức chuỗi Python sẽ giải cứu bạn cho nhiệm vụ này. Bạn có thể khám phá phương pháp này trong Bảng điều khiển

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
80

Phương thức






19, hoạt động trên một chuỗi, trả về một danh sách các chuỗi trong đó mỗi từ là một mục riêng lẻ trong danh sách. Theo mặc định,





19 phân tách chuỗi dựa trên vị trí có khoảng trắng trong chuỗi. Bạn sẽ thấy cách sử dụng





19 một cách linh hoạt hơn ở phần sau của cuốn sách này

Bây giờ bạn có thể sử dụng phương pháp này trên văn bản Kiêu hãnh và định kiến

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
81

Hãy nhìn vào các từ trong danh sách được in ra. Tôi không hiển thị đầu ra ở đây vì Jane Austen đã viết nhiều từ. Nhiệm vụ của bạn là tìm tất cả các từ đã được sử dụng trong cuốn sách. Bạn có phiền nếu một từ được viết hoa trong một số trường hợp và không được viết hoa trong những trường hợp khác không? . Nếu một từ xuất hiện ở cuối câu và theo sau là dấu chấm hoặc dấu chấm thì sao?

Trong bất kỳ dự án nào mà bạn đưa dữ liệu từ nguồn bên ngoài vào, bạn sẽ cần xóa dữ liệu trước khi có thể bắt đầu sử dụng dữ liệu đó. Những gì cần thiết để làm sạch dữ liệu sẽ phụ thuộc vào dữ liệu bạn có và bạn muốn làm gì với dữ liệu đó. Trong trường hợp này, làm sạch dữ liệu có nghĩa là xóa chữ viết hoa và xóa dấu chấm câu để bạn chỉ còn lại các từ viết thường

Bạn có thể bắt đầu bằng cách xóa tất cả chữ viết hoa trong văn bản. Bạn đã sử dụng phương thức chuỗi






22 trước đó trong Chương này để thay đổi một chuỗi thành một bản sao hoàn toàn bằng chữ thường. Bạn có một danh sách trong đó mỗi mục là một chuỗi. Bạn có thể sử dụng phương pháp





22 trên mỗi chuỗi này bằng vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5

Tuy nhiên, có một cách đơn giản hơn. Khi bạn viết một chương trình máy tính, bạn sẽ không bao giờ viết mã của mình từ dòng đầu tiên đến dòng cuối cùng theo thứ tự. Bạn sẽ nhảy tới nhảy lui khi thêm mã và thực hiện các thay đổi trong suốt tập lệnh của mình. Trong trường hợp này, tốt hơn hết bạn nên quay lại nơi bạn có một chuỗi dài duy nhất và áp dụng phương thức






22 cho chuỗi đó

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
82

Cái này có hiệu quả không?

Không, họ không phải. Bạn sẽ nhớ lại khi chúng ta nói về các kiểu dữ liệu có thể thay đổi và không thể thay đổi và so sánh sự khác biệt giữa cách hoạt động của phương thức danh sách và phương thức chuỗi. Các phương thức chuỗi không thay đổi chuỗi mà chúng đang tác động. Thay vào đó, họ trả lại một bản sao. Bạn có thể ghi đè điều này bằng cách gán lại chuỗi được trả về cùng một biến

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
83

Đầu ra từ mã này như sau—danh sách được cắt bớt trong đầu ra được hiển thị ở đây cho mục đích hiển thị

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
84

Một vài từ đầu tiên trong danh sách làm nổi bật một vài mục có vấn đề. Nếu bạn nhìn vào mục thứ 8 và 14, bạn sẽ thấy






26 và





27. Chúng là cùng một từ, nhưng không phải cho Python

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
85

Dấu phẩy thừa trong trường hợp đầu tiên làm cho các chuỗi khác nhau. Vì bạn sẽ cần xác định những từ nào được lặp lại, nên bạn sẽ cần xóa dấu phẩy này và tất cả các dấu chấm câu khác. Ở phần đầu của Chương này, bạn đã bắt gặp một phương thức chuỗi khác sẽ hữu ích ở đây, đó là






28. Bạn có thể bắt đầu bằng cách xóa tất cả các dấu phẩy trước

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
86

Bạn đang thay thế tất cả dấu phẩy bằng khoảng trắng trong toàn bộ văn bản trước khi tách chuỗi thành danh sách các từ

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
87

Các dấu phẩy đã biến mất. Dấu phẩy bạn vẫn thấy là dấu phân cách các từ trong danh sách—đây là dấu phẩy Python chứ không phải dấu phẩy trong văn bản. Bây giờ bạn sẽ cần lặp lại thao tác này cho tất cả các dấu chấm câu. Bạn đã thấy rằng bạn có hai tùy chọn để lặp lại mã, vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 và





30. Vì bạn cần lặp qua tất cả các dấu chấm câu, nên vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 là cách tốt nhất để thực hiện. Bạn có thể bắt đầu bằng cách chọn một vài dấu chấm câu

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
88

Bạn có thể lặp qua bất kỳ loại dữ liệu có thể lặp nào và một chuỗi là một loại có thể lặp lại. Do đó, bạn có thể viết một chuỗi có nhiều dấu chấm câu trong câu lệnh

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5. Biến





33 sẽ bằng với





34 trong lần lặp đầu tiên và do đó, phương thức





28 sẽ thay thế tất cả các dấu chấm bằng khoảng trắng. Trong lần lặp thứ hai của vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5,





33 sẽ bằng với





38, v.v.

Bạn có thể quét qua đầu ra của mã để đảm bảo rằng không có dấu chấm câu nào bạn đã liệt kê trong câu lệnh vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 ở đó

Bây giờ bạn cần cố gắng nghĩ về tất cả các dấu chấm câu có thể. Hoặc chỉ cần dựa vào chuỗi sẵn sàng sử dụng mà Python có trong một trong các mô-đun tích hợp của nó có tên là






40. Bạn có thể khám phá điều này trong Bảng điều khiển trước

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
89

Mô-đun này chứa một chuỗi có tên là






41 chứa tất cả các dấu chấm câu có sẵn. Bây giờ bạn có thể xóa tất cả các dấu chấm câu khỏi Kiêu hãnh và định kiến

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
20

Bạn đã hoàn thành phần đầu tiên của dự án này. Bạn đã đọc văn bản từ tệp văn bản và xóa dữ liệu. Bây giờ, bạn có thể xóa

print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
32 cuối cùng vì bạn không còn cần xem danh sách được hiển thị mỗi khi bạn chạy tập lệnh của mình nữa

Bạn đã học về nhận xét như một cách để làm cho mã của bạn dễ đọc hơn. Bạn có thể thêm một vài nhận xét ngắn gọn và được sắp xếp hợp lý trong mã của mình

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
21

Không có số lượng bình luận lý tưởng mà bạn cần đưa vào. Điều này phụ thuộc vào sở thích và phong cách của bạn. Tôi đã chọn không bình luận phần đầu tiên nơi tệp đang được mở vì mã có vẻ đủ rõ ràng. Nhận xét trong khối cuối cùng ở đó để nhắc nhở người đọc rằng






43 là một danh sách các chuỗi. Khi các chương trình phát triển, bạn có thể không theo dõi được loại dữ liệu mà các biến khác nhau đang lưu trữ, vì vậy một nhận xét như thế này có thể hữu ích

Nhận xét không phải là cách duy nhất để làm cho mã dễ đọc hơn. Chọn tên biến mô tả cũng quan trọng không kém. Đặt tên cho biến được xác định trong câu lệnh

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5





33 làm cho vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 dễ đọc hơn mà không cần chú thích

Dự án P&P. Phân tích tần số từ

Bạn đã chuyển đổi văn bản thành một danh sách các từ đã được làm sạch. Làm thế nào để bạn tiến hành từ thời điểm này? . "Làm thế nào tôi có thể thực hiện nhiệm vụ này bằng bút và giấy nếu tôi có nhiều thời gian rảnh rỗi?"

Hãy thử viết ra các bước bạn cần làm trước khi đọc tiếp

Dưới đây là các bước bạn cần làm để giải quyết vấn đề này

  • Nhìn vào từ đầu tiên và viết nó ra một tờ giấy. Thêm số
    print[type[a_number]]
    print[type[another_number]]
    print[type[my_name]]
    print[type[many_numbers]]
    print[type[more_numbers]]
    86 bên cạnh để cho biết đây là lần đầu tiên bạn tìm thấy từ này
  • Di chuyển đến từ tiếp theo. Bạn đã gặp từ này trước đây chưa?
    • Nếu đây không phải là lần đầu tiên bạn tìm thấy từ này, hãy tìm nó trên tờ giấy của bạn và thêm
      print[type[a_number]]
      print[type[another_number]]
      print[type[my_name]]
      print[type[many_numbers]]
      print[type[more_numbers]]
      86 vào số bên cạnh
    • Nếu đây là lần đầu tiên bạn bắt gặp từ này, hãy viết nó xuống cuối tờ giấy và thêm
      print[type[a_number]]
      print[type[another_number]]
      print[type[my_name]]
      print[type[many_numbers]]
      print[type[more_numbers]]
      86 vào bên cạnh
  • Lặp lại các bước này cho đến khi bạn xem hết cuốn sách
  • Thường xuyên dừng lại để pha cho mình những ly cà phê đậm đà

Bây giờ bạn đã tạo thuật toán mà bạn cần tuân theo. Nhiệm vụ tiếp theo của bạn là dịch các bước này từ tiếng Anh sang Python, ngoại trừ bước cuối cùng sẽ dịch không tốt

Trước khi bạn có thể bắt đầu viết mã cho phần tiếp theo này, bạn có một quyết định quan trọng khác cần đưa ra. Cách tốt nhất để lưu trữ dữ liệu của bạn là gì? . Bạn có thể sử dụng từ điển

Thật hữu ích khi tạo một phiên bản giả của từ điển mà bạn muốn trong Bảng điều khiển để trực quan hóa nó và để bạn có thể thử nghiệm nó khi cần

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
22

Bây giờ bạn đã biết từ điển của mình sẽ ở dạng nào và cách thêm từ mới cũng như tăng số lượng cho các từ đã có trong từ điển, bạn có thể quay lại tập lệnh P&P. Trước tiên, bạn cần tạo một biến có từ điển trống được lưu trữ trong đó

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
23

Tiếp theo, bạn cần lặp lại các bước bạn đã liệt kê trước đó, xem qua từng từ trong văn bản. Bạn sẽ cần một vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 cho điều này, trong đó bạn lặp qua danh sách các từ bạn đã tạo trước đó

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
24

Bạn nên sử dụng phiên bản số ít của tên mà bạn đã sử dụng cho danh sách của mình làm biến bạn xác định trong câu lệnh vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5,





52 Điều này làm cho mã dễ đọc hơn

Đối với mỗi từ trong danh sách các từ, bạn đang kiểm tra xem từ đó đã có trong từ điển chưa






53. Bạn có thể giải cấu trúc những gì đang xảy ra trong câu lệnh





54 bằng cách quay lại từ điển giả mà bạn đã tạo trong Bảng điều khiển

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
25

Phương thức từ điển






55 trả về một chuỗi chứa tất cả các khóa trong từ điển. Từ khóa





56 có thể được sử dụng để trả về





57 hoặc





58 dựa trên việc chuỗi bạn sử dụng có nằm trong chuỗi chứa tất cả các khóa hay không. Cho đến nay, bạn vẫn chưa bắt gặp từ khóa





59, nhưng bạn có thể đoán nó có tác dụng gì từ ví dụ trên

Còn một bước cuối cùng. Bạn sẽ cần thêm một câu lệnh






60 để theo dõi





54 để giải thích cho các từ đã có trong từ điển. Điều này sẽ xảy ra khi vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 bắt gặp một từ lần thứ hai, thứ ba, v.v.

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
26

Đã đến lúc tiết lộ biến






53 chứa gì bằng cách in nó

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
27

Đầu ra là một từ điển rất dài—chỉ một phiên bản rút gọn được hiển thị ở đây, nhưng bạn sẽ có thể xem toàn bộ từ điển trong phiên bản của mình

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
28

Bạn có một cuốn từ điển với tất cả các từ trong cuốn sách và số lần mỗi từ được sử dụng. Bạn có thể tìm ra có bao nhiêu từ độc đáo trong cuốn sách

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
29

Độ dài của từ điển






53 là số cặp khóa-giá trị. Điều này cho chúng ta thấy rằng có





65 từ độc đáo trong cuốn sách. Tôi đang bao gồm dòng đầu tiên và dòng cuối cùng của tệp văn bản bao gồm tín dụng cho nguồn dữ liệu. Những khoản tín dụng này bao gồm một vài từ không có trong cuốn sách thực tế. Nếu bạn đã xóa những dòng này, bạn sẽ nhận được một số thấp hơn một chút

"Tôi có thể sắp xếp từ điển dựa trên tần suất xuất hiện của từ không?" . câu trả lời là có. Mặc dù có thể thực hiện điều này trực tiếp trong Python, nhưng bạn sẽ thực hiện một cách tiếp cận khác trong phần tiếp theo, cách tiếp cận này sẽ cho phép bạn sắp xếp bằng một công cụ mà bạn có thể đã quen thuộc

Vòng qua một từ điển

Ở phần đầu của Chương này, khi bạn lần đầu tìm hiểu về từ điển, bạn đã thấy rằng bạn có thể lặp qua một từ điển. Tuy nhiên, bạn chỉ có thể lặp qua các khóa của từ điển. Hãy xem xét một cách tốt hơn để lặp qua từ điển với vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5

Một đường vòng rất ngắn đầu tiên. Tạo một tuple chứa hai mục

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
70

Bạn có thể giải nén bộ dữ liệu này thành hai biến riêng biệt

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
71

Giải nén cũng hoạt động với các trình tự khác, không chỉ các bộ dữ liệu. Bây giờ, hãy xem xét một phương thức từ điển khác có tên là






67. Bạn có thể sử dụng cùng một từ điển giả mà bạn đã sử dụng trước đó khi thử nghiệm trong Bảng điều khiển

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
72

Phương thức này trả về một đối tượng kiểu






68. Loại dữ liệu này là gì không quan trọng. Điều quan trọng là đó là một trình tự trong đó mỗi cặp khóa-giá trị được nhóm trong một bộ. Bạn có thể thấy mục đầu tiên trong chuỗi này là





69, v.v. Do đó, bạn có thể sử dụng trình tự được trả về từ





67 trong vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
73

Giờ đây, bạn có thể lặp qua một từ điển và có quyền truy cập vào tất cả thông tin trong từ điển, không chỉ các phím. Biến






72 chứa một bộ có hai phần tử. Vì vậy, bạn có thể giải nén bộ dữ liệu này. Thật vậy, bạn có thể giải nén trực tiếp trong câu lệnh
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
74

Bây giờ bạn đang xác định hai biến trong câu lệnh

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5,





75 và





76, đồng thời gán giá trị cho chúng bằng cách giải nén các bộ trong chuỗi được trả về bởi





77. Do đó, bạn có quyền truy cập vào cả khóa và giá trị trong mỗi lần lặp của vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5

Ghi dữ liệu vào bảng tính

Bạn gần như có tất cả các công cụ cần thiết để xem qua từ điển chứa các từ và tần suất xuất hiện của từ và viết nội dung của nó vào một bảng tính. Chỉ có một điều còn thiếu. Bạn đã thấy cách mở và đọc một tệp. Bạn cũng có thể mở và ghi vào một tệp

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
75

Bạn đã mở tệp theo cách tương tự như trước đây, với một điểm khác biệt. Hiện tại có hai đối số trong






03

  • tên của tệp dưới dạng chuỗi, bao gồm cả phần mở rộng tệp
  • một chuỗi thứ hai hiển thị chế độ bạn muốn mở tệp trong

Chuỗi






80 là viết tắt của write. Bạn đang mở tệp ở chế độ ghi. Tệp





81 không tồn tại trong thư mục của bạn nhưng việc mở tệp ở chế độ ghi sẽ tạo tệp nếu tệp không tồn tại

Một lời cảnh báo. nếu bạn mở một tệp đã tồn tại bằng đối số






80, tệp của bạn sẽ bị ghi đè. Luôn đảm bảo rằng bạn có bản sao lưu của bất kỳ tệp nào bạn muốn sử dụng để tránh vô tình xóa nội dung của tệp. Một chế độ khác có sẵn với





03 là





84, viết tắt của append. Một tệp được mở ở chế độ nối thêm sẽ cho phép bạn ghi vào cuối tệp hiện có mà không xóa nội dung hiện có của nó

Trước đó trong Chương này khi bạn mở






01, bạn chỉ sử dụng tên tệp làm đối số khi gọi





03. Trong trường hợp này, chế độ mặc định là





87, viết tắt của read—tệp được mở ở chế độ chỉ đọc để giữ cho tệp gốc an toàn khỏi bị sửa đổi ngẫu nhiên trong mã Python của bạn

Nếu bạn định vị thư mục dự án của mình trên máy tính, giờ đây bạn có thể tìm thấy một tệp mới có tên là






81. Mở tệp này sẽ hiển thị cho bạn một tệp văn bản có nội dung sau

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
76

Nếu bạn nhìn lại chuỗi bạn đã sử dụng làm đối số đầu vào trong






03, bạn sẽ nhận thấy ký tự





90 sau dấu chấm đầu tiên. Đây được gọi là ký tự thoát. Các ký tự thoát trong chuỗi bắt đầu bằng dấu gạch chéo ngược. Ký tự thoát này đại diện cho ký tự xuống dòng. Bạn sẽ nhận thấy rằng





90 không được in ra trong tệp văn bản nhưng một dòng mới bắt đầu tại thời điểm đó

Bạn cũng có thể nhận thấy rằng phương thức






92 trả về số nguyên





93. Đây là số ký tự được ghi vào tệp. Bạn sẽ không cần giá trị này, vì vậy bạn có thể bỏ qua nó

Bây giờ, bạn có thể quay lại dự án P&P và bạn đã sẵn sàng xuất dữ liệu sang bảng tính. Bạn sẽ sử dụng định dạng tệp CSV, đây là định dạng bảng tính đơn giản nhất. CSV là viết tắt của các giá trị được phân tách bằng dấu phẩy. Tệp CSV là một tệp văn bản tiêu chuẩn có phần mở rộng tệp






94, trong đó mỗi giá trị được phân tách bằng dấu phẩy, như tên ngụ ý. Các giá trị này là nội dung của từng ô trong bảng tính. Máy tính của bạn sẽ mở tệp CSV bằng phần mềm bảng tính mặc định của bạn

Các bước bạn cần để tạo một bảng tính là

  • mở một tập tin hỗ trợ ghi
  • viết dòng tiêu đề của bảng tính
  • lặp qua từ điển
    
    
    
    
    
    
    53 và ghi từng cặp khóa-giá trị vào tệp
  • đóng tệp [trừ khi bạn đang sử dụng câu lệnh
    
    
    
    
    
    
    17]

Bây giờ bạn có thể dịch các bước này sang Python

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
77

Trước vòng lặp, bạn đang viết dòng trên cùng của bảng tính, đó là hàng tiêu đề. Bạn sẽ cần bao gồm ký tự xuống dòng






90 để chỉ ra rằng đây là cuối dòng

Trong vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5, bạn đang sử dụng chuỗi f để viết nội dung của các biến





75 và





76 mà bạn đã xác định trong câu lệnh
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5. Chúng đại diện cho các khóa và giá trị trong từ điển. Ngoài ra còn có một dấu phẩy ngăn cách các giá trị và một ký tự xuống dòng ở cuối

Bây giờ bạn có thể tìm thấy tệp có tên

for item in range[10]:
    print[item]
02 trong thư mục Dự án của mình. Nếu bạn bấm đúp vào CSV này giống như bất kỳ tệp nào khác mà bạn muốn mở trên máy tính của mình, thì tệp này sẽ mở trong phần mềm bảng tính tiêu chuẩn của bạn. Nếu bạn muốn sắp xếp các từ dựa trên tần số xuất hiện của chúng, bạn có thể làm như vậy trong phần mềm bảng tính của mình

Đây là mã đầy đủ cho dự án P&P. Trong phiên bản bên dưới, từ khóa






17 được sử dụng để mở tệp CSV để ghi, phù hợp với những gì bạn đã sử dụng trước đó để đọc tệp văn bản và các phương pháp hay nhất hiện đại trong Python. Tuy nhiên, nếu bạn muốn sử dụng phiên bản có





03 và





16 rõ ràng ngay bây giờ, bạn có thể làm như vậy

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
78

Trong phần Đoạn trích ở cuối Chương này, bạn sẽ thấy một phiên bản sửa đổi của mã này để đóng gói các phần khác nhau thành các chức năng. Bạn cũng sẽ thêm một phần bổ sung để tạo một bài kiểm tra đơn giản sẽ đưa ra cho bạn một từ ngẫu nhiên trong sách và bạn sẽ cần đoán tần suất xuất hiện của từ đó trong sách

Phần kết luận

Dữ liệu là một phần quan trọng của mọi chương trình máy tính. Các ngôn ngữ lập trình như Python có nhiều loại dữ liệu và cấu trúc dữ liệu để xử lý mọi yêu cầu. Tìm hiểu sự khác biệt và tương đồng giữa các loại dữ liệu khác nhau, cách chuyển đổi giữa các loại dữ liệu và cách thao tác với dữ liệu được lưu trữ trong các biến là một phần quan trọng của việc học viết mã

Trong Chương này, bạn đã bao quát

  • Sự khác biệt giữa các loại dữ liệu có thể lặp lại và không thể lặp lại là gì
  • Sự khác biệt giữa các loại dữ liệu có thể thay đổi và không thay đổi là gì
  • Cách sử dụng các phương thức liên kết với kiểu dữ liệu
  • Cách sử dụng bộ dữ liệu và từ điển
  • Cách đọc dữ liệu từ một tập tin
  • Cách ghi dữ liệu vào tệp

Điểm dừng tiếp theo của bạn trên hành trình này sẽ đầy lỗi và lỗi. Chương tiếp theo tập trung vào sự khác biệt giữa lỗi và lỗi và tìm hiểu cách xử lý lỗi cũng như cách tìm và sửa lỗi

Chương tiếp theo

Mục lục

Đoạn trích

Liệt kê các cách hiểu và các cách hiểu khác

Trong Chương này và trong Chương trước, bạn đã học về một thuật toán phổ biến và hữu ích trong lập trình. Bạn cần điền vào danh sách hoặc cấu trúc dữ liệu khác. Trước tiên, bạn tạo một danh sách trống và sau đó bạn sử dụng vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 để viết mã sẽ thêm các mục vào danh sách đó. Bạn cũng có thể thực hiện bất kỳ thao tác nào cần thiết trong vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5

Ví dụ: giả sử bạn có một danh sách tên và bạn muốn tạo một danh sách mới chứa các tên giống nhau bằng chữ in hoa

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
79

Danh sách

for item in range[10]:
    print[item]
08 có năm mục trong đó. Đầu ra từ mã này hiển thị một danh sách chứa các phiên bản viết hoa của những tên này

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
80

Các bước bạn sử dụng trong thuật toán này là

  1. Tạo một danh sách trống mới
  2. Lặp lại danh sách ban đầu bằng vòng lặp
    for item in "Stephen":
        print[item]
    
    for item in [2, 5, 7, 23, 1, 4, 10]:
        print[item]
    5
  3. Thực hiện thao tác được yêu cầu trên từng mục của danh sách gốc và nối kết quả vào danh sách mới

Ba bước này phổ biến trong lập trình đến nỗi Python có cách ngắn hơn để đạt được kết quả tương tự. Bạn có thể sử dụng hiểu danh sách

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
81

Bây giờ bạn đã thay thế ba dòng trong mã gốc để tạo danh sách trống và sau đó điền vào đó bằng vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 bằng một dòng mã. Dòng này là một danh sách hiểu. Hãy xem xét các yếu tố khác nhau trên dòng này

  • Bạn đang tạo một biến mới có tên là
    for item in range[10]:
        print[item]
    11 theo cách thông thường với toán tử gán
  • Ở phía bên tay phải của biển báo
    print[type[a_number]]
    print[type[another_number]]
    print[type[my_name]]
    print[type[many_numbers]]
    print[type[more_numbers]]
    84, bạn có dấu ngoặc vuông cho biết danh sách
  • Thuật ngữ đầu tiên bên trong dấu ngoặc vuông tham chiếu đến một biến
    for item in range[10]:
        print[item]
    13 chưa tồn tại. Bạn sẽ hiểu điều này trong phần gạch đầu dòng tiếp theo. Phương thức chuỗi
    print[type[a_number]]
    print[type[another_number]]
    print[type[my_name]]
    print[type[many_numbers]]
    print[type[more_numbers]]
    59 được áp dụng cho bất kỳ thứ gì được lưu trữ trong biến
    for item in range[10]:
        print[item]
    13 và được đặt trong danh sách
  • Tiếp theo thuật ngữ đầu tiên trong phần hiểu danh sách, bạn có một câu lệnh
    for item in "Stephen":
        print[item]
    
    for item in [2, 5, 7, 23, 1, 4, 10]:
        print[item]
    5. Câu lệnh
    for item in "Stephen":
        print[item]
    
    for item in [2, 5, 7, 23, 1, 4, 10]:
        print[item]
    5 này giống với câu lệnh
    for item in "Stephen":
        print[item]
    
    for item in [2, 5, 7, 23, 1, 4, 10]:
        print[item]
    5 bạn đã sử dụng trong vòng lặp
    for item in "Stephen":
        print[item]
    
    for item in [2, 5, 7, 23, 1, 4, 10]:
        print[item]
    5 ban đầu

Một cách khác để xem những gì đang xảy ra trong phần hiểu danh sách này là dịch dòng này sang tiếng Anh đơn giản. Bản dịch sẽ đọc như thế này. Tạo một danh sách có tên là

for item in range[10]:
    print[item]
11 và điền vào đó với đầu ra từ
for item in range[10]:
    print[item]
21 cho mọi tên trong danh sách tên

Hiệu quả của việc hiểu danh sách

Khả năng hiểu danh sách làm cho mã gọn hơn và viết nhanh hơn. Tuy nhiên, cũng có một số lợi thế về hiệu quả khi sử dụng tính năng hiểu danh sách so với phiên bản dài hơn

Khi bạn tạo một danh sách trống, chương trình máy tính không biết danh sách đó sẽ lớn đến mức nào và phân bổ một lượng bộ nhớ nhất định cho danh sách này. Hãy nhớ rằng mã được thực thi từng dòng một và vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 chỉ được thực hiện khi chương trình chạy. Do đó, chương trình sẽ cần có khả năng nhìn thấy tương lai để biết kích thước của danh sách này, điều này là không thể. Khi bạn nối thêm nhiều mục vào danh sách trong vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5, chương trình có thể cần tạo thêm dung lượng trống trong bộ nhớ để thêm mục mới. Việc này tốn thời gian

Với khả năng hiểu danh sách, vì toàn bộ quá trình diễn ra trên một dòng duy nhất, chương trình có thể hiệu quả hơn và tạo danh sách có kích thước chính xác ngay lập tức

Bạn sẽ đọc thêm về sự khác biệt về hiệu quả giữa hai phiên bản mã này trong Chương sau khi bạn cũng sẽ so sánh điều này với các cách khác để giải quyết vấn đề tương tự

Liệt kê các cách hiểu với câu điều kiện

Giả sử rằng trong danh sách mới của bạn, bạn chỉ muốn có các phiên bản viết hoa của tên dài bốn chữ cái. Trong phiên bản cổ điển của thuật toán, bạn có thể thêm câu lệnh






54 vào vòng lặp
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 của mình

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
82

Chỉ khi độ dài của

for item in range[10]:
    print[item]
13 bằng với
print[type[a_number]]
print[type[another_number]]
print[type[my_name]]
print[type[many_numbers]]
print[type[more_numbers]]
56 thì bạn mới thêm phiên bản viết hoa của tên vào danh sách mới. Điều này mang lại đầu ra sau

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
83

Bạn có thể đạt được kết quả tương tự với khả năng hiểu danh sách

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
84

Mã này cho đầu ra giống như phiên bản dài hơn trước nó. Bạn đã quản lý để nén bốn dòng mã thành một

Bản dịch bây giờ đọc. Tạo một danh sách có tên là

for item in range[10]:
    print[item]
11 và điền vào đó với đầu ra từ
for item in range[10]:
    print[item]
21 cho mọi tên trong danh sách tên nếu độ dài của tên là 4. Phần bổ sung được in đậm. Bạn có thể thấy rằng mã Python và bản dịch tiếng Anh của nó không khác nhau là mấy

Hãy thực hiện một bổ sung cuối cùng. Nếu tên không dài bốn chữ cái, thì bạn muốn đặt chuỗi

for item in range[10]:
    print[item]
30 vào danh sách thay vì tên. Trong phiên bản gốc của mã, bạn có thể thêm một





60 vào câu lệnh





54

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
85

Mã này cho kết quả sau

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
86

Khả năng hiểu danh sách cũng có thể được sử dụng để đạt được điều này

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
87






54 hiện được theo sau bởi một





60 trong phần hiểu danh sách. Bạn có thể nhận thấy rằng câu lệnh





54/





60 đứng trước câu lệnh
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 trong cách hiểu danh sách này. Tuy nhiên, khi không có





60, như trong ví dụ trước, câu lệnh





54 xuất hiện sau câu lệnh
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5

Nếu đây là văn bản chính, tôi sẽ giới thiệu cho bạn một đoạn trích để giải thích lý do tại sao lại như vậy, vì nó không phải là chìa khóa để hiểu cách hiểu danh sách. Tuy nhiên, bạn đã đọc một đoạn. Câu trả lời ngắn gọn là tổ hợp






54/





60 tự nó là một toán tử Python được gọi là toán tử bậc ba. Do đó, thuật ngữ đứng trước câu lệnh
for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 là
for item in range[10]:
    print[item]
44, bản thân nó là một câu lệnh Python hợp lệ. Tuy nhiên, tôi sẽ không thảo luận thêm về toán tử bậc ba

cách hiểu khác

Hiểu danh sách là loại hiểu được sử dụng phổ biến nhất. Tuy nhiên, bạn cũng có thể sử dụng khả năng hiểu với các cấu trúc dữ liệu khác

Nếu bạn muốn tạo một từ điển trong đó các khóa bao gồm từng tên trong danh sách tên và giá trị của mỗi khóa là độ dài của tên, bạn có thể viết đoạn mã sau

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
88

Thuật toán tương tự như phiên bản trước với danh sách. Bạn tạo một từ điển trống và sau đó lặp qua danh sách ban đầu bằng cách sử dụng vòng lặp

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 để thêm các mục vào từ điển. Đầu ra từ mã này là như sau

a_number = 5
another_number = 5.3
my_name = "Stephen"
many_numbers = [2, 5, 7, 23, 1, 4, 10]
more_numbers = range[10]
89

Bạn có thể đạt được kết quả tương tự bằng cách sử dụng cách hiểu từ điển

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
0

Câu lệnh trước từ khóa

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
5 hiện bao gồm khóa và giá trị được phân tách bằng dấu hai chấm, như trường hợp của tất cả các từ điển

Việc hiểu từ điển có thể phức tạp hơn một chút nếu các khóa và giá trị đến từ các cấu trúc dữ liệu khác nhau

Bạn có thể muốn thử điều tương tự với một tuple

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
1

Đầu ra từ mã này cho kết quả sau

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
2

Bạn sẽ đọc về máy phát điện sau này trong cuốn sách này. Vì vậy, tôi sẽ không tập trung vào chúng ở giai đoạn này. Nếu bạn muốn tạo một tuple bằng cách hiểu, bạn có thể làm như sau

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
3

Và điều này thực sự mang lại một tuple

for item in "Stephen":
    print[item]

for item in [2, 5, 7, 23, 1, 4, 10]:
    print[item]
4

Sự hiểu biết ban đầu có thể trông hơi kỳ lạ. Tuy nhiên, khi bạn đã quen với chúng, bạn sẽ thấy chúng là một cách thuận tiện và hữu ích để viết mã gọn gàng và hiệu quả hơn. Và họ cũng sẽ giúp bạn tiết kiệm một vài dòng mã

Chương tiếp theo

Mục lục

Đăng ký để cập nhật

Trang web này đã được ra mắt vào tháng 5 năm 2021. Văn bản chính của cuốn sách hiện đã gần hoàn thành—một vài chương vẫn đang được hoàn thiện. Bài viết trên blog cũng được xuất bản thường xuyên

Đăng ký nhận thông tin cập nhật và bạn cũng sẽ tham gia Diễn đàn Codetoday nơi bạn có thể đặt câu hỏi cho tôi khi bạn trải qua hành trình học viết mã Python này

Có bao nhiêu cấu trúc trong Python?

Python có bốn cấu trúc dữ liệu sẵn có không nguyên thủy là Danh sách, Từ điển, Bộ và Tập hợp. Chúng gần như bao gồm 80% cấu trúc dữ liệu trong thế giới thực của chúng tôi.

4 cấu trúc dữ liệu là gì?

Cấu trúc dữ liệu tuyến tính phổ biến là. .
Cấu trúc dữ liệu mảng. Trong một mảng, các phần tử trong bộ nhớ được sắp xếp trong bộ nhớ liên tục. .
Cấu trúc dữ liệu ngăn xếp. Trong cấu trúc dữ liệu ngăn xếp, các phần tử được lưu trữ theo nguyên tắc LIFO. .
Cấu trúc dữ liệu hàng đợi. .
Cấu trúc dữ liệu danh sách liên kết

Các loại cấu trúc dữ liệu khác nhau là gì?

Cấu trúc dữ liệu có thể được định nghĩa là nhóm các thành phần dữ liệu cung cấp cách lưu trữ và tổ chức dữ liệu hiệu quả trong máy tính để có thể sử dụng hiệu quả. Một số ví dụ về Cấu trúc dữ liệu là mảng, Danh sách được liên kết, Ngăn xếp, Hàng đợi, v.v.

4 kiểu dữ liệu tích hợp sẵn của Python là gì?

Python cũng cung cấp một số loại dữ liệu tích hợp sẵn, cụ thể là dict , list , set và freezeset cũng như tuple .

Chủ Đề