Làm cách nào để in nhiều giá trị từ một khóa trong python?

Chúng ta đã học cách lưu trữ các bit dữ liệu đơn lẻ trong các biến nhưng điều gì sẽ xảy ra khi chúng ta có một số bit dữ liệu được liên kết với nhau và cần được lưu trữ cùng nhau?

Lưu trữ nhiều giá trị trong một danh sách

Chúng tôi tạo một danh sách bằng cách đặt các giá trị bên trong dấu ngoặc vuông và phân tách các giá trị bằng dấu phẩy

odds = [1, 3, 5, 7]
print('odds are:', odds)

odds are: [1, 3, 5, 7]

Chúng tôi chọn các phần tử riêng lẻ từ danh sách bằng cách lập chỉ mục cho chúng giống như chúng tôi đã làm đối với chuỗi

print('first and third:', odds[0], odds[2])

first and third: 1 5

bắt đầu từ con số không

Điều rất quan trọng cần nhớ là Python (giống như nhiều ngôn ngữ khác) lập chỉ mục các bộ sưu tập của nó từ 0 thay vì một. Nói cách khác, phần tử đầu tiên của danh sách được đưa ra bởi chỉ số

first and last: 1 7
4, phần tử thứ hai bởi chỉ số
first and last: 1 7
5, v.v. Do đó, phần tử cuối cùng được cho bởi số phần tử trong danh sách trừ đi một, e. g. đối với ví dụ trên, phần tử cuối cùng là
first and last: 1 7
6

Các ngôn ngữ lập trình như Fortran, MATLAB và R bắt đầu đếm từ 1 vì đó là điều con người đã làm hàng nghìn năm nay. Các ngôn ngữ trong họ C (bao gồm C++, Java, Perl và Python) được tính từ 0 vì nó đại diện cho phần bù từ giá trị đầu tiên trong mảng (giá trị thứ hai được bù đắp bởi một chỉ số từ giá trị đầu tiên). Cách này gần giống với cách máy tính biểu diễn mảng (nếu bạn quan tâm đến lý do lịch sử đằng sau việc đếm các chỉ số từ 0, bạn có thể đọc bài đăng trên blog của Mike Hoye)

Bạn cũng có thể sử dụng các chỉ số phủ định để truy cập các phần tử từ cuối danh sách, vì vậy phần tử cuối cùng sẽ là

first and last: 1 7
7, phần áp chót là
first and last: 1 7
8, v.v.

first and last: 1 7
1

first and last: 1 7

Bạn có thể nhận thấy có sự tương đồng đáng kể giữa danh sách và chuỗi và trên thực tế, rất nhiều điều bạn có thể làm với chuỗi cũng có thể thực hiện với danh sách. Tuy nhiên, có một sự khác biệt quan trọng giữa hai. chúng ta có thể thay đổi các giá trị trong một danh sách, nhưng chúng ta không thể thay đổi các ký tự riêng lẻ trong một chuỗi. Ví dụ

first and last: 1 7
3

first and last: 1 7
4

hoạt động, nhưng

first and last: 1 7
5

first and last: 1 7
6

không làm

Ch-Ch-Ch-Ch-Thay đổi

Dữ liệu có thể sửa đổi tại chỗ được gọi là có thể thay đổi, trong khi dữ liệu không thể sửa đổi được gọi là bất biến. Chuỗi và số là bất biến. Điều này không có nghĩa là các biến có giá trị chuỗi hoặc số là hằng số, mà khi chúng ta muốn thay đổi giá trị của một biến chuỗi hoặc số, chúng ta chỉ có thể thay thế giá trị cũ bằng một giá trị hoàn toàn mới.

Mặt khác, danh sách và mảng có thể thay đổi. chúng ta có thể sửa đổi chúng sau khi chúng được tạo. Chúng ta có thể thay đổi các phần tử riêng lẻ, thêm các phần tử mới hoặc sắp xếp lại toàn bộ danh sách. Đối với một số thao tác, chẳng hạn như sắp xếp, chúng ta có thể chọn sử dụng hàm sửa đổi dữ liệu tại chỗ hay hàm trả về bản sao đã sửa đổi và giữ nguyên bản gốc

Danh sách lồng nhau

Vì danh sách có thể chứa bất kỳ biến Python nào, nên nó thậm chí có thể chứa các danh sách khác

Ví dụ: chúng ta có thể trưng bày các sản phẩm trên kệ của một cửa hàng tạp hóa nhỏ

odds are: [1, 3, 5, 7]
0

Dưới đây là một ví dụ trực quan về cách lập chỉ mục danh sách các danh sách

first and last: 1 7
9 hoạt động

Làm cách nào để in nhiều giá trị từ một khóa trong python?

Sử dụng danh sách đã khai báo trước đó

first and last: 1 7
9, đây sẽ là kết quả của các hoạt động chỉ mục được hiển thị trong hình ảnh

odds are: [1, 3, 5, 7]
1

odds are: [1, 3, 5, 7]
2

odds are: [1, 3, 5, 7]
3

odds are: [1, 3, 5, 7]
4

odds are: [1, 3, 5, 7]
5

odds are: [1, 3, 5, 7]
6

Cảm ơn Hadley Wickham cho hình ảnh trên

Danh sách không đồng nhất

Danh sách trong Python có thể chứa các phần tử thuộc các loại khác nhau. Thí dụ

odds are: [1, 3, 5, 7]
7

Gọi hàm trên đối tượng

Các loại

first and last: 1 7
2,
first and last: 1 7
3 và
first and last: 1 7
33 thực sự là các đối tượng phức tạp hơn các số cơ bản và do đó có một số đoạn mã tích hợp nhất định mà bạn có thể chạy trên chúng. Điều này được thực hiện thông qua một cuộc gọi chức năng. Ví dụ

odds are: [1, 3, 5, 7]
8

Mã này yêu cầu Python chạy hàm

first and last: 1 7
34 trên đối tượng được trỏ bởi biến
first and last: 1 7
35. Ký hiệu chấm này được sử dụng ở mọi nơi trong Python. vật đứng trước dấu chấm chứa vật đứng sau.
first and last: 1 7
34 có một tham số. chuỗi con cần tìm trong chuỗi Mã này được gửi đến mã được tham chiếu bởi tên
first and last: 1 7
34 (hàm) và sau khi mã này được chạy, nó sẽ trả về chỉ mục của chuỗi con (nếu tìm thấy) rồi tiếp tục. Bạn cũng có thể có các chức năng không cần bất kỳ đầu vào nào, ví dụ như
first and last: 1 7
38

Có nhiều cách để thay đổi nội dung của danh sách ngoài việc gán giá trị mới cho các phần tử riêng lẻ

odds are: [1, 3, 5, 7]
9

print('first and third:', odds[0], odds[2])
0

print('first and third:', odds[0], odds[2])
1

print('first and third:', odds[0], odds[2])
2

print('first and third:', odds[0], odds[2])
3

print('first and third:', odds[0], odds[2])
4

Trong khi sửa đổi tại chỗ, thật hữu ích khi nhớ rằng Python xử lý các danh sách theo cách hơi phản trực giác

Nếu chúng tôi tạo một danh sách và (cố gắng) sao chép nó rồi sửa đổi tại chỗ, chúng tôi có thể gây ra đủ loại rắc rối

print('first and third:', odds[0], odds[2])
5

print('first and third:', odds[0], odds[2])
6

Điều này là do Python lưu trữ một danh sách trong bộ nhớ và sau đó có thể sử dụng nhiều tên biến (hoặc 'nhãn') để chỉ cùng một danh sách. Nếu tất cả những gì chúng tôi muốn làm là sao chép một danh sách (đơn giản), chúng tôi có thể sử dụng hàm

first and last: 1 7
2, vì vậy chúng tôi không sửa đổi danh sách mà chúng tôi không cố ý

print('first and third:', odds[0], odds[2])
7

print('first and third:', odds[0], odds[2])
8

Điều này khác với cách các biến hoạt động trong bài 2 khi bạn đang lưu trữ các số và chuỗi (bất biến). Theo mặc định, Python sẽ áp dụng một tên biến khác cho cùng một đối tượng thay vì sao chép nó nếu nó không phải là một trong những loại bất biến cơ bản

Danh sách cắt lát

Có thể truy cập tập hợp con của danh sách và chuỗi bằng cách chỉ định phạm vi giá trị trong dấu ngoặc vuông bằng cách sử dụng dấu hai chấm để phân tách chỉ mục đầu tiên và cuối cùng+1 bắt buộc. Điều này thường được gọi là "cắt" danh sách/chuỗi

print('first and third:', odds[0], odds[2])
9

first and third: 1 5
0

Nếu bạn muốn lấy một lát từ phần đầu của dãy, bạn có thể bỏ qua chỉ số đầu tiên trong dãy

first and third: 1 5
1

first and third: 1 5
2

Và tương tự, bạn có thể bỏ chỉ số kết thúc trong dãy để đi một lát đến cuối dãy

first and third: 1 5
3

first and third: 1 5
4

Sử dụng từ điển để lưu trữ dữ liệu liên kết

Danh sách được sử dụng để lưu trữ các bộ sưu tập đối tượng được sắp xếp theo thứ tự mà bạn cần truy cập bằng một giá trị chỉ mục đơn giản. Tuy nhiên, không phải tất cả dữ liệu đều như thế này. Ví dụ: làm cách nào bạn lưu trữ dữ liệu từ sổ địa chỉ nơi bạn có các 'trường' có giá trị được liên kết với chúng? . Các giá trị được lưu trữ trong từ điển được liên kết với một khóa mà sau đó bạn có thể sử dụng để truy xuất giá trị thay vì sử dụng chỉ mục

first and third: 1 5
5

Bạn có thể sử dụng bất kỳ đối tượng bất biến nào làm khóa (trong thực tế, đây thường là số hoặc chuỗi. ) và lưu trữ bất kỳ đối tượng nào dưới dạng giá trị bao gồm các

first and last: 1 7
2 hoặc các
first and last: 1 7
3 khác. Cũng giống như danh sách, có một số cách để thêm các mục vào từ điển. Cách dễ nhất trong số này là chỉ cần tham chiếu một khóa mới và gán cho nó một giá trị

first and third: 1 5
6

first and third: 1 5
7

Cắt từ cuối

Sử dụng cắt để chỉ truy cập bốn ký tự cuối cùng của một chuỗi hoặc các mục của danh sách

first and third: 1 5
8

first and third: 1 5
9

Liệu giải pháp của bạn có hoạt động bất kể bạn có biết trước độ dài của chuỗi hoặc danh sách (e. g. nếu bạn muốn áp dụng giải pháp cho một tập hợp các danh sách có độ dài khác nhau)?

Dung dịch

Sử dụng các chỉ số phủ định để đếm các phần tử từ cuối vùng chứa (chẳng hạn như danh sách hoặc chuỗi)

first and last: 1 7
10

Lát không liên tục

Cho đến nay, chúng ta đã biết cách sử dụng phép cắt để lấy các khối đơn lẻ của các mục liên tiếp từ một chuỗi. Nhưng nếu chúng ta muốn lấy một tập hợp con các mục không nằm cạnh nhau trong chuỗi thì sao?

Bạn có thể đạt được điều này bằng cách cung cấp đối số thứ ba cho phạm vi trong ngoặc, được gọi là kích thước bước. Ví dụ dưới đây cho thấy cách bạn có thể lấy mọi mục nhập thứ ba trong danh sách

first and last: 1 7
11

first and last: 1 7
12

Lưu ý rằng lát cắt được thực hiện bắt đầu bằng mục đầu tiên trong phạm vi, tiếp theo là các mục được thực hiện ở các khoảng cách đều nhau (các bước) sau đó. Nếu bạn muốn bắt đầu tập hợp con với mục nhập thứ ba, bạn cần chỉ định đó là điểm bắt đầu của phạm vi được cắt

first and last: 1 7
13

first and last: 1 7
14

Sử dụng đối số kích thước bước để tạo một chuỗi mới chỉ chứa mọi ký tự khác trong chuỗi “Trong khu vườn của bạch tuộc trong bóng râm”

first and last: 1 7
15

first and last: 1 7
16

Dung dịch

Để có được mọi ký tự khác, bạn cần cung cấp một lát có kích thước bước là 2

first and last: 1 7
17

Bạn cũng có thể bỏ qua phần đầu và phần cuối của lát để lấy toàn bộ chuỗi và chỉ cung cấp đối số bước để đi từng phần tử thứ hai

first and last: 1 7
18

quá tải

first and last: 1 7
42 thường có nghĩa là phép cộng, nhưng khi được sử dụng trên chuỗi hoặc danh sách, nó có nghĩa là “nối”. Cho rằng, bạn nghĩ toán tử nhân
first and last: 1 7
43 làm gì trong danh sách?

first and last: 1 7
19

  1. first and last: 1 7
    
    44
  2. first and last: 1 7
    
    45
  3. first and last: 1 7
    
    46
  4. first and last: 1 7
    
    47

Thuật ngữ kỹ thuật cho điều này là quá tải toán tử. một toán tử đơn lẻ, chẳng hạn như

first and last: 1 7
42 hoặc
first and last: 1 7
43, có thể thực hiện những việc khác nhau tùy thuộc vào ứng dụng của nó

Dung dịch

Toán tử nhân

first and last: 1 7
43 được sử dụng trên danh sách sao chép các phần tử của danh sách và nối chúng lại với nhau

first and last: 1 7
0

Nó tương đương với

first and last: 1 7
1

Những điểm chính

  • first and last: 1 7
    
    51 tạo một danh sách

  • Danh sách có thể chứa bất kỳ đối tượng Python nào, kể cả danh sách (i. e. , danh sách các danh sách)

  • Danh sách được lập chỉ mục và cắt bằng dấu ngoặc vuông (e. g. , danh sách[0] và danh sách[2. 9]), giống như chuỗi và mảng

    1 Key có thể có nhiều giá trị không?

    Mỗi khóa chỉ có thể có một giá trị . Nhưng cùng một giá trị có thể xảy ra nhiều lần trong Hash, trong khi mỗi khóa chỉ có thể xảy ra một lần.

    Bạn có thể có nhiều khóa giống nhau trong từ điển Python không?

    Không, mỗi khóa trong từ điển phải là duy nhất. Bạn không thể có hai khóa có cùng giá trị . Cố gắng sử dụng lại cùng một khóa sẽ chỉ ghi đè lên giá trị được lưu trữ trước đó. Nếu một khóa cần lưu trữ nhiều giá trị thì giá trị được liên kết với khóa phải là một danh sách hoặc một từ điển khác.