Lưu trữ dữ liệu

Giả sử bạn đã phát triển một trò chơi trên máy tính có tên là "Người dùng thù địch", trong đó người chơi cạnh tranh với một giao diện máy tính phức tạp và không thân thiện. Bây giờ bạn cần viết một chương trình theo dõi doanh thu hàng tháng của trò chơi này trong khoảng thời gian 5 năm. Hoặc giả sử bạn cần kiểm kê Thẻ giao dịch Hacker Hero.
Bạn sẽ sớm đi đến kết luận rằng bạn cần nhiều hơn các loại dữ liệu cơ bản đơn giản để lưu trữ và xử lý thông tin.
 

Danh sách (mảng)

Để thuận tiện khi làm việc với một lượng lớn dữ liệu, một nhóm các ô được đặt tên chung. Nhóm các ô như vậy được gọi là mảng.
 
Mảng – nó là một nhóm các ô nhớ cùng loại, nằm cạnh nhau và có tên chung. Mỗi ô trong nhóm có một số duy nhất.

Khi làm việc với mảng, bạn cần học cách giải quyết ba nhiệm vụ:
x cấp phát bộ nhớ có kích thước cần thiết cho mảng;
x ghi dữ liệu vào ô mong muốn;
x đọc dữ liệu từ một ô.

 

Mảng trong Python

Không có mảng nào như vậy trong Python. Thay vào đó, danh sách được sử dụng để lưu trữ một nhóm đối tượng cùng loại (nhưng không chỉ cùng loại) - các đối tượng thuộc loại list. Sự khác biệt giữa danh sách và mảng là danh sách là một cấu trúc động, kích thước của nó có thể thay đổi trong quá trình thực hiện chương trình (xóa, thêm phần tử) mà không cần nghĩ đến các thao tác quản lý bộ nhớ (việc này do trình biên dịch thực hiện).
Trong tương lai, khi phân tích công việc với danh sách, chúng tôi sẽ sử dụng từ "mảng", vì hầu hết các danh sách thường được sử dụng chính xác trong vai trò của một mảng (chúng lưu trữ dữ liệu cùng loại).
 
Tạo mảng
Khi một mảng được tạo, không gian được cấp phát trong bộ nhớ (một số ô nhất định). 1) Có thể tạo mảng bằng cách đơn giản liệt kê các phần tử: Một = [1, 4, 7, 12, 5] in(loại(A)) Chương trình sẽ xuất ra
<lớp 'danh sách'>
Nghĩa là, một mảng là một đối tượng kiểu list (được dịch từ tiếng Anh list).

2) Mảng có thể bao gồm dữ liệu thuộc bất kỳ loại nào - số nguyên hoặc số thực, chuỗi ký tự  A = ["Vasya", "Petya", "Fedya"]

Một số cách làm việc với mảng
3) Mảng có thể được "thêm vào". A = [1, 5] + [25, 7]
4) Có thể thay thế phép cộng các mảng giống hệt nhau bằng phép nhân. Vì vậy, thật dễ dàng để tạo một mảng chứa các giá trị giống nhau, như sau: A = [0]*10 # đã tạo một mảng gồm 10 phần tử và điền vào đó các số không
5) Một mảng luôn "biết" kích thước của bạn. Hàm  len() được sử dụng để xác định kích thước của một mảng. Thường kích thước của mảng được lưu trữ trong một biến riêng để chương trình có thể dễ dàng thay đổi để làm việc với kích thước mảng khác.

Ví dụ
N = 10 # lưu trữ kích thước của mảng trong biến N A = [0] * N # tạo mảng kích thước N print(len(A)) # in kích thước của mảng Kích thước của một mảng có thể được thiết lập từ bàn phím.

Làm việc với các phần tử của mảng

Phần lớn tính hữu ích của mảng đến từ thực tế là các phần tử của nó có thể được truy cập riêng lẻ.
Cách để làm điều này là sử dụng một chỉ số để đánh số các phần tử.
 
Chỉ mụclà một giá trị trỏ đến một phần tử mảng cụ thể.

Để chỉ một phần tử của một mảng, bạn phải chỉ định tên của mảng theo sau là chỉ số của nó trong dấu ngoặc vuông. Ví dụ: bạn có thể ghi giá trị 100 vào phần tử mảng ở chỉ số 1 như sau: A[1] = 100.


Bạn phải nhớ!
ĐÁNH SỐ Mảng TRONG PYTHON BẮT ĐẦU TỪ SỐ KHÔNG!
(Đây là điều kiện tiên quyết - bạn phải bắt đầu lại từ đầu. Điều này đặc biệt quan trọng cần nhớ.)
 
Ví dụ
x = (A[3] + 5) * A[1] # đọc giá trị của A[3] và A[1] A[0] = x + 6 # ghi giá trị mới vào A[0]
Hãy phân tích chương trình làm việc với mảng phần tử. tôi = 1 A = [0] * 5 # tạo mảng 5 phần tử A[0] = 23 # vào mỗi trong số 5 phần tử mảng (chỉ số từ 0 đến 4) A[1] = 12 # viết một giá trị cụ thể A[2] = 7 A[3] = 43 A[4] = 51 A[2] = A[i] + 2*A[i-1] + A[2*i] # thay đổi giá trị của phần tử có chỉ số 2 thành kết quả của biểu thức # vì i=1, thay giá trị của biến i vào biểu thức ta được # biểu thức sau A[2] = A[1] + 2*A[0] + A[2]; in(A[2] + A[4])
Là kết quả của việc chạy chương trình này giá trị của tổng các phần tử của mảng có chỉ số 2 và chỉ số 4 bằng 116 sẽ xuất hiện trên màn hình. Như bạn có thể thấy từ ví dụ, chúng ta có thể truy cập bất kỳ phần tử nào của mảng . Và cũng tính số phần tử cần thiết bằng nhiều công thức khác nhau (ví dụ: như trong chương trình A[i-1] hoặc A[2*i]). Trong những trường hợp này, chỉ số của các phần tử sẽ được tính toán và phụ thuộc vào giá trị của i.

Trong Python, bạn có thể sử dụng giá trị chỉ số âm cho mảng, và đếm từ cuối mảng. Ví dụ: A[-1] - phần tử cuối cùng của mảng A[-2] - phần tử áp chót v.v.

Hãy phân tích chương trình. N=5 A = [0] * N  x=1 in(A[x - 3])   # truy cập phần tử A[-2] print(A[x - 3 + len(A)]) # truy xuất phần tử A[3]                       # đây là phần tử giống với  A[-2] A[x + 4] = A[x] + A[2 * (x + 1)]  # sau khi thay x vào các biểu thức và phép tính                            # lấy dòng tiếp theo A[5] = A[1] + A[4]                           # A[5] không tồn tại phần tử nào như vậy                           # lỗi - mảng ngoài giới hạn Vì mảng được khai báo có 5 phần tử nên các phần tử sẽ được đánh số từ -5 đến 4. Chúng ta thấy rằng chương trình ở dòng thứ 6 đề cập đến một phần tử không tồn tại: A[5].
Hóa ra chương trình đã đi quá giới hạn của mảng.
 

Trong những trường hợp như vậy, chương trình thường gặp sự cố với lỗi thời gian chạy.

Lặp qua các phần tử mảng

Khi làm việc với mảng, bạn thường phải làm việc với tất cả các phần tử của mảng cùng một lúc.
 
Lặp qua các phần tử: lặp qua tất cả các phần tử của mảng và thực hiện một số thao tác nếu cần trên mỗi người trong số họ.

Đối với điều này, một vòng lặp có biến thường được sử dụng nhất, thay đổi từ 0 thành N-1, trong đó N là số mảng phần tử.
Trong N, chúng tôi sẽ xem xét kích thước hiện tại của mảng, tức là  N = len(A). ... cho tôi trong phạm vi (N): # ở đây chúng tôi làm việc với A[i] ... Trong vòng lặp chỉ định, biến i sẽ nhận các giá trị 0, 1, 2, ..., N-1.  Như vậy, tại mỗi bước của vòng lặp, chúng ta truy cập vào một phần tử cụ thể của mảng có số i.
Vì vậy, chỉ cần mô tả những gì cần thực hiện với một phần tử của mảng A[i] và đặt các hành động này bên trong một vòng lặp như vậy là đủ.

Hãy viết chương trình điền vào mảng N các số tự nhiên đầu tiên, nghĩa là khi kết thúc chương trình, các phần tử của mảng sẽ trở nên bằng nhau A[0] = 1 A[1] = 2 A[2] = 3 ... A[N - 1] = N Dễ thấy quy luật: giá trị của phần tử mảng phải lớn hơn chỉ số của phần tử đó 1 đơn vị.

Vòng lặp sẽ trông như thế này cho tôi trong phạm vi (N): A[i] = i + 1

Danh sách trình tạo

Ngôn ngữ Python cho phép bạn giải quyết nhiều vấn đề một cách chính xác và đáng tin cậy. Hãy liệt kê các khả năng chính để điền vào một mảng. 1) Việc tạo và điền vào một mảng có thể được viết như sau: A = [i for i in range(N)] # Với N = 5, mảng A = [0,1,2,3,4] A = [i*i for i in range(N)] # Với N = 5, mảng A = [0,1,4,9,16] for i in range(N) - lặp qua tất cả các giá trị i từ 0 đến N-1.

Phần tử tiếp theo của mảng sẽ chứa giá trị đứng trước từ for, trong trường hợp đầu tiên là i, trong trường hợp thứ hai - i*i.

Chúng tôi nhận được kết quả tương tự bằng cách sử dụng ký hiệu sau: A = list(range(N)) # với N = 5, mảng A = [0,1,2,3,4]
2) Bạn có thể ghi vào mảng không phải tất cả các giá trị, mà chỉ những giá trị thỏa mãn một điều kiện nhất định.
 
Ví dụ
Làm đầy mảng với tất cả các số chẵn trong phạm vi 0 đến 9. A = [i cho tôi trong phạm vi (10) nếu tôi % 2 == 0] in(*A) # mảng A = [0,2,4,6,8] Trong trường hợp này, bạn cần hiểu rằng độ dài của mảng sẽ nhỏ hơn 10. 

3) Việc điền một mảng từ bàn phím với các phần tử nằm trên mỗi dòng có thể được thực hiện theo hai cách.
 

4) Việc điền một mảng từ bàn phím với các phần tử nằm trên cùng một dòng sẽ phức tạp hơn một chút. Bạn cần đọc chuỗi, chia nó thành các phần tử, sau đó chuyển đổi từng phần tử thành một số nguyên s = input().split()  A = [int(i) for i in s]  hoặc là A = list(map(int, input().split())) # hàm tích hợp list()   # biến đổi dãy   # vào danh sách có thể thay đổi

Đầu ra mảng

Bạn cũng có thể hiển thị mảng trên màn hình theo nhiều cách khác nhau.
 
N=5 Một = [0]*5 cho tôi trong phạm vi (N): A[i] = int(input()) A = [int(input()) for i in range(N)] # mỗi khi vòng lặp lặp lại, # chuỗi đầu vào được chuyển đổi # thành số nguyên (dùng int) # và số này được thêm vào mảng

Cách tiêu chuẩn, được sử dụng trong nhiều ngôn ngữ lập trình. Một chu trình như vậy có thể được viết ngắn hơn. Giá trị của х ở mỗi bước của vòng lặp được lấp đầy bằng phần tử tiếp theo của mảng. Trong Python, bạn có thể viết như thế này.
cho tôi trong phạm vi (len (A)): in(A[i], end=" ") cho x trong A: in(x, end=" ") in(*A) # dấu * trước tên # của mảng có nghĩa là # cần phải được chuyển đổi # mảng thành một tập hợp các giá trị riêng lẻ