Mảng python có bắt đầu từ số 0 không?

Cho dù bạn viết mã bằng JavaScript, Python, Java, PHP, Ruby hay Go, để truy cập phần tử đầu tiên của mảng, bạn sẽ cần tham khảo mảng[0]. Điều này thường gây nhầm lẫn cho các nhà phát triển mới — tại sao chúng ta bắt đầu đánh số từ số không?

Ảnh của Agence Producteurs Locaux Damien Kühn trên Bapt

Đầu tiên, cần chỉ ra rằng không phải ngôn ngữ lập trình nào cũng tuân theo cách đánh số dựa trên số 0. Trước khi quyết định viết bài này, tôi đã biết Lua đã vi phạm quy ước đó, nhưng tôi rất ngạc nhiên khi phát hiện ra rằng đây không phải là trường hợp hiếm gặp

AWK, COBOL, Fortran, R, Julia, Lua, MATLAB, Smalltalk, Wolfram Language — Trong tất cả các ngôn ngữ này, chỉ mục mặc định của phần tử đầu tiên trong một mảng là một

(Danh sách đầy đủ có thể được tìm thấy trên Wikipedia)

Câu trả lời phổ biến nhất cho câu hỏi đánh số mảng, chỉ ra rằng việc đánh số dựa trên số 0 xuất phát từ chính thiết kế ngôn ngữ. Trong C, một mảng trỏ đến vị trí trong bộ nhớ, do đó, trong biểu thức array[n], n không được coi là một chỉ mục, mà là một phần bù từ phần đầu của mảng

“Việc tham chiếu bộ nhớ theo địa chỉ và độ lệch được thể hiện trực tiếp trong phần cứng máy tính trên hầu như tất cả các kiến ​​trúc máy tính, do đó, chi tiết thiết kế này trong C giúp quá trình biên dịch dễ dàng hơn…” — Wikipedia

Để minh họa điều đó, chúng ta có thể chạy chương trình C bên dưới

#include int main()
{
int data[6] = {1, 2, 3, 4, 5, 6};
int i = 0;

printf("Array address: %p\n", data);

do {
printf("Array[%u] = %p\n", i, (void *)(&data[i]));
i++;
} while(i < 6);
}

đầu ra


Array address: 0x7ffe9472bad0
Array[0] = 0x7ffe9472bad0
Array[1] = 0x7ffe9472bad4
Array[2] = 0x7ffe9472bad8
Array[3] = 0x7ffe9472badc
Array[4] = 0x7ffe9472bae0
Array[5] = 0x7ffe9472bae4

Như chúng ta có thể thấy trong ví dụ này, phần tử đầu tiên và bản thân mảng trỏ đến cùng một vị trí bộ nhớ, do đó, nó cách vị trí của chính mảng đó 0 phần tử

Mặt khác, tôi cũng phát hiện ra rằng nhiều câu trả lời chỉ ra bài viết của Dijkstra. Tại sao đánh số nên bắt đầu từ số không. Nó giải thích vấn đề làm thế nào để biểu thị dãy con của các số tự nhiên. Tôi thấy lý luận của nó thú vị từ góc độ toán học. Tuy nhiên, vì ngôn ngữ C có trước bài viết này nên nó dường như không liên quan đến câu hỏi

Chuyển đến nội dung chính

Giới thiệu về Python

Nắm vững kiến ​​thức cơ bản về phân tích dữ liệu với Python chỉ trong bốn giờ. Khóa học trực tuyến này sẽ giới thiệu giao diện Python và khám phá các gói phổ biến

Python trung gian

Nâng cao kỹ năng khoa học dữ liệu của bạn bằng cách tạo trực quan hóa bằng Matplotlib và thao tác với DataFrames bằng gấu trúc

Có liên quan

SQL so với Python. Bạn nên học cái nào?

Trong bài viết này, chúng tôi sẽ đề cập đến các tính năng chính của Python và SQL, những điểm tương đồng và khác biệt chính của chúng cũng như bạn nên chọn cái nào trước để bắt đầu hành trình khoa học dữ liệu của mình

Javier Canales Luna •

12 phút

Dữ liệu văn bản trong Python Cheat Sheet

Chào mừng bạn đến với bảng gian lận của chúng tôi để làm việc với dữ liệu văn bản trong Python. Chúng tôi đã biên soạn một danh sách các hàm và gói hữu ích nhất để dọn dẹp, xử lý và phân tích dữ liệu văn bản trong Python, cùng với các ví dụ và giải thích rõ ràng, vì vậy bạn sẽ có mọi thứ cần biết về cách làm việc với dữ liệu văn bản trong Python.

Hướng dẫn về tập hợp và lý thuyết tập hợp trong Python

Tìm hiểu về bộ Python. chúng là gì, cách tạo chúng, khi nào sử dụng chúng, các chức năng tích hợp và mối quan hệ của chúng với các hoạt động lý thuyết thiết lập

Hướng dẫn về gấu trúc. Khung dữ liệu trong Python

Khám phá phân tích dữ liệu với Python. Pandas DataFrames giúp thao tác dữ liệu của bạn dễ dàng, từ việc chọn hoặc thay thế các cột và chỉ mục để định hình lại dữ liệu của bạn

Xem ThêmXem Thêm

Tàn dư từ những ngày xưa. Trước đó khi bạn tạo một mảng, nó sẽ tạo một khối trong bộ nhớ có kích thước nhất định. nếu kích thước của loại của bạn là 2 byte và độ dài mảng là 5, thì 10 byte sẽ được dành riêng. Khi bạn cố lấy giá trị từ mảng, nó sẽ nhìn vào vị trí đầu tiên trong mảng và sau đó cộng phần bù nhân với kích thước loại. trong mảng trước đó, mảng[0] sẽ bắt đầu và giữ nguyên ở đó, trả về giá trị từ byte 1 và 2, trong khi mảng[3] sẽ bù nó bằng 3*2=6 byte và trả về giá trị từ byte 7 và 8. Không phải tất cả các ngôn ngữ đều sử dụng các mảng như vậy nữa, nhưng mọi người đã quen với việc phần tử đầu tiên là 0 nên nhiều người (nhưng không phải tất cả) cũng chọn làm cho mảng của họ bắt đầu từ 0

Danh sách là một tập hợp các đối tượng được sắp xếp theo thứ tự trong python. Nó thực sự đơn giản để hiểu và chúng ta sẽ nhanh chóng tìm hiểu những điều cơ bản. Bạn có thể tạo danh sách theo nhiều cách trong python

example = [] # empty list
example = list() # empty list
example = [1,2,3] # list with three elements
example = [0, "zero"] # elements can be of mixed types

Lập chỉ mục chỉ có nghĩa là truy cập các phần tử.
Để truy cập các phần tử trong danh sách, bạn có thể sử dụng ký hiệu dấu ngoặc vuông. Có nhiều phương pháp để truy cập các phần tử trong python.

Ghi chú

danh sách python được lập chỉ mục 0. Vì vậy, phần tử đầu tiên là 0, thứ hai là 1, v.v. Vì vậy, nếu có n phần tử trong danh sách, phần tử cuối cùng là n-1. Nhớ điều này

Truy cập phần tử đơn

Bạn có thể truy cập các phần tử đơn lẻ bằng cách sử dụng tên theo sau là một số trong []. như vậy.
print example[0] # first element
print example[1] # second element, so on

Bạn có thể truy cập các phần tử ở cuối bằng cách thêm dấu trừ. Một trong những lý do tôi yêu trăn

print example[-1]  # n-th (last) element. Note it is -1 and not -0 (:P). 
print example[-2] # n-1-th element

cắt lát

Cắt một danh sách cho chúng ta một danh sách khác, thay vì một phần tử. Cắt lát là một tính năng cực kỳ hữu ích trong python, một tính năng mà bạn sẽ sử dụng rất nhiều

Một lát chỉ định một chỉ mục bắt đầu và một chỉ mục kết thúc, đồng thời tạo và trả về một danh sách mới dựa trên các chỉ mục. Các chỉ số được phân tách bằng dấu hai chấm '. '. Hãy nhớ rằng danh sách phụ được trả về chỉ chứa các phần tử cho đến khi (chỉ số kết thúc - 1). Ví dụ

example = [1,2,3,4,5] # create a list
print example[0:5] # Whole list, prints [1,2,3,4,5]
print example[1:5] # prints [2,3,4,5]
print example[4:5] # prints [5]

Nếu bạn bỏ qua chỉ mục bắt đầu, thì nó được coi là bằng không. Nếu bạn bỏ qua chỉ mục kết thúc thì nó được coi là độ dài của danh sách. Cho nên

example = [1,2,3,4,5]
print example[:5] # treated as example[0:5] -> prints [1,2,3,4,5]
print example[3:] # treated it as example[3:5] -> prints [4,5]
print example[:] # treated as example[0:5] -> prints [1,2,3,4,5]

Lưu ý rằng ví dụ cuối cùng [. ] thường được sử dụng để tạo danh sách trùng lặp. Hãy nhớ rằng new_list = old_list chỉ tạo một tham chiếu đến old_list, nhưng

new_list = old_list[:]

tạo một bản sao của old_list

Thêm thủ thuật lập chỉ mục

Hãy lấy một danh sách chứa 100 số đầu tiên, bắt đầu từ 0. Chúng ta có thể làm điều đó bằng cách sử dụng phạm vi (100), như vậy

________số 8

Bây giờ hãy xem xét 'kích thước bước'. Kích thước bước chỉ định với phần tử để chọn trong khi lập chỉ mục. Vì vậy, kích thước bước là 1 yêu cầu python chọn mọi phần tử, kích thước bước là 2 có nghĩa là chọn các phần tử thay thế, v.v.

Kích thước bước được chỉ định sau chỉ mục kết thúc, trước dấu hai chấm. tôi. e

my_list[start_index:end_index:step_size]

Tất nhiên, nếu bạn để trống start_index và end_index, python sẽ nhận giá trị 0 và len(my_list) của nó. Kích thước bước mặc định là một - nó có tất cả các phần tử

Nếu bạn chỉ muốn số chẵn, kích thước bước có thể là 2


Array address: 0x7ffe9472bad0
Array[0] = 0x7ffe9472bad0
Array[1] = 0x7ffe9472bad4
Array[2] = 0x7ffe9472bad8
Array[3] = 0x7ffe9472badc
Array[4] = 0x7ffe9472bae0
Array[5] = 0x7ffe9472bae4
0

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48

Bạn có thể nhận được các số chẵn từ 4 đến 40 bằng cách sử dụng


Array address: 0x7ffe9472bad0
Array[0] = 0x7ffe9472bad0
Array[1] = 0x7ffe9472bad4
Array[2] = 0x7ffe9472bad8
Array[3] = 0x7ffe9472badc
Array[4] = 0x7ffe9472bae0
Array[5] = 0x7ffe9472bae4
1

Bây giờ đến phần yêu thích của tôi (và tại sao python lại tuyệt vời). Bạn có thể sử dụng kích thước bước âm để đảo ngược quá trình duyệt danh sách. Hãy thử kích thước bước -1 và xem điều gì sẽ xảy ra

print example[0] # first element
print example[1] # second element, so on
0

Điều đó thật tuyệt

Một số thành ngữ hữu ích

Trong phần này, tôi sẽ liệt kê một vài thành ngữ lập chỉ mục danh sách mà tôi thấy hữu ích

print example[0] # first element
print example[1] # second element, so on
1

Đó là nó

Cảm ơn đã đọc bài đăng trên blog này. Nếu bạn có bất kỳ phản hồi/chỉnh sửa/bổ sung/lời chê bai nào, vui lòng cho tôi biết trong phần nhận xét

Các mảng Python 0 hoặc 1 được lập chỉ mục?

Python sử dụng lập chỉ mục dựa trên số không . Điều đó có nghĩa là, phần tử đầu tiên (giá trị 'đỏ') có chỉ số 0, phần tử thứ hai (giá trị 'xanh lá cây') có chỉ số 1, v.v.

Chỉ số mảng bắt đầu từ 1 hay 0?

Chỉ số mảng luôn bắt đầu từ 0 Ngôn ngữ lập trình được thiết kế sao cho tên mảng luôn trỏ đến phần tử đầu tiên của mảng.