Làm cách nào để bạn nhận được giá trị thứ hai trong danh sách python?

Danh sách là một tập hợp các giá trị được sắp xếp theo thứ tự. Các giá trị tạo nên một danh sách được gọi là các phần tử của nó hoặc các mục của nó. Chúng tôi sẽ sử dụng thuật ngữ phần tử hoặc mục để chỉ điều tương tự. Danh sách tương tự như chuỗi, là tập hợp các ký tự được sắp xếp theo thứ tự, ngoại trừ các phần tử của danh sách có thể thuộc bất kỳ loại nào. Danh sách và chuỗi — và các tập hợp khác duy trì thứ tự của các phần tử — được gọi là chuỗi

11. 1. Liệt kê giá trị

Có một số cách để tạo danh sách mới; . [ and ]]:

1
2

ps = [10, 20, 30, 40]
qs = ["spam", "bungee", "swallow"]

Ví dụ đầu tiên là danh sách bốn số nguyên. Thứ hai là một danh sách gồm ba chuỗi. Các phần tử của danh sách không nhất thiết phải cùng loại. Danh sách sau đây chứa một chuỗi, một số float, một số nguyên và [đáng kinh ngạc] một danh sách khác

1

zs = ["hello", 2.0, 5, [10, 20]]

Một danh sách trong một danh sách khác được gọi là lồng nhau

Cuối cùng, một danh sách không có phần tử nào được gọi là danh sách rỗng và được ký hiệu là [] .

Chúng ta đã thấy rằng chúng ta có thể gán giá trị danh sách cho biến hoặc chuyển danh sách dưới dạng tham số cho hàm

1
2
3
4
5

>>> vocabulary = ["apple", "cheese", "dog"]
>>> numbers = [17, 123]
>>> an_empty_list = []
>>> print[vocabulary, numbers, an_empty_list]
["apple", "cheese", "dog"] [17, 123] []

11. 2. Truy cập các phần tử

Cú pháp để truy cập các phần tử của danh sách cũng giống như cú pháp để truy cập các ký tự của một chuỗi — toán tử chỉ mục. [] [đừng nhầm với danh sách trống]. Biểu thức bên trong ngoặc xác định chỉ số. Hãy nhớ rằng các chỉ số bắt đầu từ 0.

>>> numbers[0]
17

Bất kỳ biểu thức nào đánh giá một số nguyên đều có thể được sử dụng làm chỉ mục

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float

Nếu bạn cố gắng truy cập hoặc gán cho một phần tử không tồn tại, bạn sẽ gặp lỗi thời gian chạy

________số 8_______

Người ta thường sử dụng biến vòng lặp làm chỉ mục danh sách

1
2
3
4

ps = [10, 20, 30, 40]
qs = ["spam", "bungee", "swallow"]
0

Mỗi lần lặp lại, biến i được sử dụng làm chỉ mục trong danh sách, in ra kết quả i‘th element. This pattern of computation is called a list traversal.

Mẫu ở trên không cần hoặc không sử dụng chỉ mục i cho bất cứ điều gì ngoài việc lấy các mục từ danh sách, vì vậy phiên bản trực tiếp hơn này . for loop gets the items — might be preferred:

1
2
3
4

ps = [10, 20, 30, 40]
qs = ["spam", "bungee", "swallow"]
2

11. 3. Độ dài danh sách

Hàm len trả về độ dài của danh sách, bằng với số phần tử của danh sách. Nếu bạn định sử dụng một chỉ mục số nguyên để truy cập danh sách, bạn nên sử dụng giá trị này làm giới hạn trên của một vòng lặp thay vì một hằng số. Bằng cách đó, nếu kích thước của danh sách thay đổi, bạn sẽ không phải thực hiện chương trình để thay đổi tất cả các vòng lặp; .

1
2
3
4

ps = [10, 20, 30, 40]
qs = ["spam", "bungee", "swallow"]
4

Lần cuối cùng phần thân của vòng lặp được thực thi, ilen[horsemen]< . [Nhưng phiên bản không có chỉ số trông thậm chí còn tốt hơn. ] - 1, which is the index of the last element. [But the version without the index looks even better now!]

Mặc dù một danh sách có thể chứa một danh sách khác nhưng danh sách lồng nhau vẫn được tính là một phần tử trong danh sách cha của nó. Độ dài của danh sách này là 4

ps = [10, 20, 30, 40]
qs = ["spam", "bungee", "swallow"]
5

11. 4. Liệt kê thành viên

innot in là các toán tử Boolean kiểm tra . Chúng tôi đã sử dụng chúng trước đây với chuỗi, nhưng chúng cũng hoạt động với danh sách và các trình tự khác.

ps = [10, 20, 30, 40]
qs = ["spam", "bungee", "swallow"]
6

Sử dụng điều này tạo ra một phiên bản thanh lịch hơn của chương trình vòng lặp lồng nhau mà trước đây chúng tôi đã sử dụng để đếm số học sinh học môn Khoa học Máy tính trong phần

ps = [10, 20, 30, 40]
qs = ["spam", "bungee", "swallow"]
7

ps = [10, 20, 30, 40]
qs = ["spam", "bungee", "swallow"]
8

11. 5. Liệt kê các hoạt động

Toán tử + nối các danh sách.

ps = [10, 20, 30, 40]
qs = ["spam", "bungee", "swallow"]
9

Tương tự, toán tử * lặp lại danh sách một số lần nhất định.

1
0

Ví dụ đầu tiên lặp lại [0] bốn lần. Ví dụ thứ hai lặp lại danh sách [1, 2, 3] ba .

11. 6. Liệt kê các lát

Các thao tác lát mà chúng ta đã thấy trước đây với các chuỗi cho phép chúng ta làm việc với các danh sách con

1
1

11. 7. Danh sách có thể thay đổi

Không giống như chuỗi, danh sách có thể thay đổi, có nghĩa là chúng ta có thể thay đổi các phần tử của chúng. Sử dụng toán tử chỉ mục ở bên trái của phép gán, chúng ta có thể cập nhật một trong các phần tử

1
2

Toán tử dấu ngoặc được áp dụng cho danh sách có thể xuất hiện ở bất kỳ đâu trong biểu thức. Khi nó xuất hiện ở phía bên trái của một phép gán, nó sẽ thay đổi một trong các phần tử trong danh sách, vì vậy phần tử đầu tiên của quả đã được thay đổi từ < . Phép gán cho một phần tử của danh sách được gọi là phép gán mục. Mục gán không hoạt động cho chuỗi. "banana" to "pear", and the last from "quince" to "orange". An assignment to an element of a list is called item assignment. Item assignment does not work for strings:

1
3

nhưng nó làm cho danh sách

1
4

Với toán tử lát, chúng ta có thể cập nhật toàn bộ danh sách con cùng một lúc

1
5

Chúng tôi cũng có thể xóa các phần tử khỏi danh sách bằng cách gán danh sách trống cho chúng

1
6

Và chúng ta có thể thêm các phần tử vào danh sách bằng cách ép chúng vào một lát trống ở vị trí mong muốn

1
7

11. 8. xóa danh sách

Sử dụng slice để xóa các thành phần danh sách có thể dễ bị lỗi. Python cung cấp một giải pháp thay thế dễ đọc hơn. Câu lệnh del xóa một phần tử khỏi danh sách.

1
8

Như bạn mong đợi, del gây ra lỗi thời gian chạy nếu chỉ mục nằm ngoài phạm vi.

Bạn cũng có thể sử dụng del với một lát cắt để xóa danh sách phụ.

1
9

Như thường lệ, danh sách con được chọn theo lát chứa tất cả các phần tử cho đến, nhưng không bao gồm, chỉ mục thứ hai

11. 9. Đối tượng và tài liệu tham khảo

Sau khi chúng tôi thực hiện các câu lệnh gán này

1
2

zs = ["hello", 2.0, 5, [10, 20]]
1

chúng tôi biết rằng ab sẽ đề cập đến . Nhưng chúng tôi chưa biết liệu chúng có trỏ đến cùng một đối tượng chuỗi hay không. "banana". But we don’t know yet whether they point to the same string object.

Có hai cách mà trình thông dịch Python có thể sắp xếp bộ nhớ của nó

Trong một trường hợp, ab đề cập đến . Trong trường hợp thứ hai, chúng đề cập đến cùng một đối tượng.

Chúng ta có thể kiểm tra xem hai tên có tham chiếu đến cùng một đối tượng hay không bằng cách sử dụng toán tử is .

zs = ["hello", 2.0, 5, [10, 20]]
2

Điều này cho chúng ta biết rằng cả ab đều tham chiếu .

Vì các chuỗi là bất biến, nên Python tối ưu hóa tài nguyên bằng cách tạo hai tên tham chiếu đến cùng một giá trị chuỗi tham chiếu đến cùng một đối tượng

Đây không phải là trường hợp với danh sách

zs = ["hello", 2.0, 5, [10, 20]]
3

Ảnh chụp trạng thái ở đây trông như thế này

ab có cùng giá trị nhưng không tham chiếu đến cùng một đối tượng.

11. 10. Răng cưa

Vì các biến tham chiếu đến các đối tượng, nếu chúng ta gán một biến cho một biến khác, thì cả hai biến đều tham chiếu đến cùng một đối tượng

zs = ["hello", 2.0, 5, [10, 20]]
4

Trong trường hợp này, ảnh chụp nhanh trạng thái trông như thế này

Bởi vì cùng một danh sách có hai tên khác nhau, ab, we say that it is aliased. Changes made with one alias affect the other:

zs = ["hello", 2.0, 5, [10, 20]]
5

Mặc dù hành vi này có thể hữu ích, nhưng đôi khi nó không mong muốn hoặc không mong muốn. Nói chung, sẽ an toàn hơn nếu tránh răng cưa khi bạn đang làm việc với các đối tượng có thể thay đổi [i. e. liệt kê tại thời điểm này trong sách giáo khoa của chúng ta, nhưng chúng ta sẽ gặp nhiều đối tượng có thể thay đổi hơn khi chúng ta đề cập đến các lớp và đối tượng, từ điển và bộ]. Tất nhiên, đối với các đối tượng bất biến [i. e. chuỗi, bộ dữ liệu], không có vấn đề gì — không thể thay đổi điều gì đó và ngạc nhiên khi bạn truy cập tên bí danh. Đó là lý do tại sao Python miễn phí đặt bí danh cho các chuỗi [và bất kỳ loại dữ liệu bất biến nào khác] khi nó nhận thấy cơ hội để tiết kiệm

11. 11. nhân bản danh sách

Nếu chúng tôi muốn sửa đổi một danh sách và cũng giữ một bản sao của bản gốc, chúng tôi cần có khả năng tạo một bản sao của chính danh sách đó, không chỉ tài liệu tham khảo. Quá trình này đôi khi được gọi là nhân bản, để tránh sự mơ hồ của từ sao chép

Cách dễ nhất để sao chép danh sách là sử dụng toán tử lát

zs = ["hello", 2.0, 5, [10, 20]]
6

Lấy bất kỳ phần nào của a sẽ tạo một danh sách mới. Trong trường hợp này, lát xảy ra bao gồm toàn bộ danh sách. Vì vậy, bây giờ mối quan hệ là như thế này.

Giờ đây, chúng tôi có thể thoải mái thực hiện các thay đổi đối với b mà không phải lo lắng rằng chúng tôi sẽ vô tình thay đổi . :

zs = ["hello", 2.0, 5, [10, 20]]
7

11. 12. Danh sách và các vòng lặp for loops

Vòng lặp for cũng hoạt động với danh sách, như chúng ta đã thấy. Cú pháp tổng quát của vòng lặp for là.

zs = ["hello", 2.0, 5, [10, 20]]
8

Vì vậy, như chúng ta đã thấy

zs = ["hello", 2.0, 5, [10, 20]]
9

1
2
3
4
5
0

Nó gần giống như tiếng Anh. Đối với [mọi] người bạn trong [danh sách] bạn bè, hãy in [tên của] người bạn đó

Mọi biểu thức danh sách đều có thể được sử dụng trong vòng lặp for .

1
2
3
4
5
1

1
2
3
4
5
2

Ví dụ đầu tiên in tất cả các bội số của 3 trong khoảng từ 0 đến 19. Ví dụ thứ hai thể hiện sự nhiệt tình đối với các loại trái cây khác nhau

Vì danh sách có thể thay đổi nên chúng ta thường muốn duyệt qua danh sách, thay đổi từng phần tử của danh sách đó. Các hình vuông sau đây bình phương tất cả các số trong danh sách xs .

1
2
3
4

1
2
3
4
5
4

Hãy dành một chút thời gian để suy nghĩ về range[len[xs]] cho đến khi bạn hiểu cách thức hoạt động của nó.

Trong ví dụ này, chúng tôi quan tâm đến cả giá trị của một mục [chúng tôi muốn bình phương giá trị đó] và chỉ mục của nó [để chúng tôi có thể gán giá trị mới cho vị trí đó]. Mẫu này đủ phổ biến để Python cung cấp một cách hay hơn để triển khai nó

1
2
3
4

1
2
3
4
5
6

enumerate tạo ra các cặp của cả hai [chỉ mục, giá trị] trong quá trình duyệt danh sách. Hãy thử ví dụ tiếp theo này để thấy rõ hơn cách liệt kê hoạt động.

1
2

1
2
3
4
5
8

1
2
3
4
5
9

11. 13. Liệt kê tham số

Truyền danh sách dưới dạng đối số thực sự chuyển tham chiếu đến danh sách, không phải bản sao hoặc bản sao của danh sách. Vì vậy, việc truyền tham số tạo bí danh cho bạn. người gọi có một biến tham chiếu đến danh sách và hàm được gọi có bí danh, nhưng chỉ có một đối tượng danh sách bên dưới. Ví dụ: hàm bên dưới lấy một danh sách làm đối số và nhân mỗi phần tử trong danh sách với 2

1
2
3
4

>>> vocabulary = ["apple", "cheese", "dog"]
>>> numbers = [17, 123]
>>> an_empty_list = []
>>> print[vocabulary, numbers, an_empty_list]
["apple", "cheese", "dog"] [17, 123] []
1

Nếu chúng tôi thêm phần sau vào tập lệnh của mình

zs = ["hello", 2.0, 5, [10, 20]]
9

>>> vocabulary = ["apple", "cheese", "dog"]
>>> numbers = [17, 123]
>>> an_empty_list = []
>>> print[vocabulary, numbers, an_empty_list]
["apple", "cheese", "dog"] [17, 123] []
3

Khi chúng tôi chạy nó, chúng tôi sẽ nhận được

>>> vocabulary = ["apple", "cheese", "dog"]
>>> numbers = [17, 123]
>>> an_empty_list = []
>>> print[vocabulary, numbers, an_empty_list]
["apple", "cheese", "dog"] [17, 123] []
4

Trong hàm trên, tham số a_list và biến thứ are aliases for the same object. So before any changes to the elements in the list, the state snapshot looks like this:

Vì đối tượng danh sách được chia sẻ bởi hai khung, chúng tôi đã vẽ nó giữa chúng

Nếu một hàm sửa đổi các mục của tham số danh sách, người gọi sẽ thấy sự thay đổi

Sử dụng trình hiển thị Python

Chúng tôi đã đề cập đến trình hiển thị Python tại http. //netserv. ict. ru. AC. za/python3_viz. Nó là một công cụ rất hữu ích để xây dựng hiểu biết tốt về tham chiếu, bí danh, phép gán và truyền đối số cho các hàm. Đặc biệt chú ý đến các trường hợp bạn sao chép một danh sách hoặc có hai danh sách riêng biệt và các trường hợp chỉ có một danh sách cơ bản nhưng nhiều biến được đặt bí danh để tham chiếu danh sách

11. 14. Liệt kê các phương thức

Toán tử dấu chấm cũng có thể được sử dụng để truy cập các phương thức tích hợp sẵn của các đối tượng danh sách. Chúng tôi sẽ bắt đầu với phương pháp hữu ích nhất để thêm thứ gì đó vào cuối danh sách hiện có

>>> vocabulary = ["apple", "cheese", "dog"]
>>> numbers = [17, 123]
>>> an_empty_list = []
>>> print[vocabulary, numbers, an_empty_list]
["apple", "cheese", "dog"] [17, 123] []
5

append là một phương thức danh sách sẽ thêm đối số được truyền cho nó vào cuối danh sách. Chúng tôi sẽ sử dụng nó rất nhiều khi tạo danh sách mới. Tiếp tục với ví dụ này, chúng tôi hiển thị một số phương pháp danh sách khác.

>>> vocabulary = ["apple", "cheese", "dog"]
>>> numbers = [17, 123]
>>> an_empty_list = []
>>> print[vocabulary, numbers, an_empty_list]
["apple", "cheese", "dog"] [17, 123] []
6

Thử nghiệm và chơi với các phương pháp danh sách được hiển thị ở đây và đọc tài liệu của chúng cho đến khi bạn cảm thấy tự tin rằng bạn hiểu cách chúng hoạt động

11. 15. Hàm thuần túy và công cụ sửa đổi

Các hàm lấy danh sách làm đối số và thay đổi chúng trong quá trình thực thi được gọi là công cụ sửa đổi và những thay đổi mà chúng tạo ra được gọi là tác dụng phụ

Hàm thuần túy không tạo ra tác dụng phụ. Nó chỉ giao tiếp với chương trình gọi thông qua các tham số mà nó không sửa đổi và giá trị trả về. Đây là double_stuff được viết dưới dạng một hàm thuần túy.

>>> vocabulary = ["apple", "cheese", "dog"]
>>> numbers = [17, 123]
>>> an_empty_list = []
>>> print[vocabulary, numbers, an_empty_list]
["apple", "cheese", "dog"] [17, 123] []
7

>>> vocabulary = ["apple", "cheese", "dog"]
>>> numbers = [17, 123]
>>> an_empty_list = []
>>> print[vocabulary, numbers, an_empty_list]
["apple", "cheese", "dog"] [17, 123] []
8

Phiên bản double_stuff này không thay đổi đối số của nó.

>>> vocabulary = ["apple", "cheese", "dog"]
>>> numbers = [17, 123]
>>> an_empty_list = []
>>> print[vocabulary, numbers, an_empty_list]
["apple", "cheese", "dog"] [17, 123] []
9

Một quy tắc ban đầu mà chúng tôi đã thấy đối với phép gán cho biết "trước tiên hãy đánh giá phía bên tay phải, sau đó gán giá trị kết quả cho biến". Vì vậy, khá an toàn khi gán kết quả của hàm cho cùng một biến đã được truyền cho hàm

>>> numbers[0]
17
0

Phong cách nào tốt hơn?

Bất cứ điều gì có thể được thực hiện với công cụ sửa đổi cũng có thể được thực hiện với các hàm thuần túy. Trên thực tế, một số ngôn ngữ lập trình chỉ cho phép các hàm thuần túy. Có một số bằng chứng cho thấy các chương trình sử dụng các hàm thuần túy sẽ phát triển nhanh hơn và ít bị lỗi hơn các chương trình sử dụng các công cụ sửa đổi. Tuy nhiên, công cụ sửa đổi đôi khi thuận tiện và trong một số trường hợp, các chương trình chức năng kém hiệu quả hơn

Nói chung, chúng tôi khuyên bạn nên viết các hàm thuần túy bất cứ khi nào thấy hợp lý và chỉ sử dụng các công cụ sửa đổi nếu có lợi thế thuyết phục. Cách tiếp cận này có thể được gọi là phong cách lập trình chức năng

11. 16. Các hàm tạo danh sách

Phiên bản thuần túy của double_stuff ở trên đã sử dụng một mẫu quan trọng cho hộp công cụ của bạn. Bất cứ khi nào bạn cần viết một hàm tạo và trả về một danh sách, mẫu này thường là.

1
2
3
4
5

>>> numbers[0]
17
2

Hãy để chúng tôi chỉ ra cách sử dụng khác của mẫu này. Giả sử bạn đã có một hàm is_prime[x] có thể kiểm tra xem x có phải là số nguyên tố hay không. Viết hàm trả về danh sách tất cả các số nguyên tố nhỏ hơn n.

>>> numbers[0]
17
3

>>> numbers[0]
17
4

11. 17. Chuỗi và danh sách

Hai trong số các phương pháp hữu ích nhất trên chuỗi liên quan đến việc chuyển đổi sang và từ danh sách các chuỗi con. Phương thức split [mà chúng ta đã thấy] ngắt một chuỗi thành một danh sách các từ. Theo mặc định, bất kỳ số lượng ký tự khoảng trắng nào cũng được coi là ranh giới từ.

>>> numbers[0]
17
5

Một đối số tùy chọn được gọi là dấu phân cách có thể được sử dụng để chỉ định chuỗi nào sẽ được sử dụng làm điểm đánh dấu ranh giới giữa các chuỗi con. Ví dụ sau sử dụng chuỗi ai làm dấu phân cách.

>>> numbers[0]
17
6

Lưu ý rằng dấu phân cách không xuất hiện trong kết quả

Nghịch đảo của phương thức splitjoin . Bạn chọn một chuỗi phân cách mong muốn, [thường được gọi là keo] và nối danh sách với keo giữa mỗi phần tử.

>>> numbers[0]
17
7

Danh sách mà bạn dán lại với nhau [ wds trong ví dụ này] không được sửa đổi. Ngoài ra, như các ví dụ tiếp theo này cho thấy, bạn có thể sử dụng keo trống hoặc chuỗi nhiều ký tự làm keo.

>>> numbers[0]
17
8

11. 18. danh sáchphạm vi

Python có chức năng chuyển đổi loại tích hợp có tên là danh sách . Chức năng này cố gắng biến bất kỳ thứ gì bạn cung cấp thành danh sách.

>>> numbers[0]
17
9

Một tính năng cụ thể của dải ô là nó không tính toán ngay lập tức tất cả các giá trị của nó. nó “ngừng” tính toán và thực hiện nó theo yêu cầu hoặc “lười biếng”. Chúng tôi sẽ nói rằng nó hứa hẹn sẽ tạo ra các giá trị khi cần thiết. Điều này rất thuận tiện nếu tính toán của bạn rút ngắn quá trình tìm kiếm và trả về sớm, như trong trường hợp này.

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
0

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
1

Trong thử nghiệm thứ hai, nếu phạm vi háo hức xây dựng một danh sách với tất cả các yếu tố đó, bạn sẽ sớm sử dụng hết bộ nhớ khả dụng của máy tính và làm hỏng chương trình. Nhưng nó thông minh hơn thế. Tính toán này hoạt động tốt, bởi vì đối tượng range chỉ là một lời hứa để tạo ra các phần tử nếu và khi chúng cần thiết. Khi điều kiện trong if trở thành đúng, không có phần tử nào khác được tạo và hàm trả về. [Ghi chú. Trước Python 3, range không lười biếng. Nếu bạn sử dụng các phiên bản Python cũ hơn, YMMV. ]

YMMV. Số dặm của bạn có thể thay đổi

Từ viết tắt YMMV là viết tắt của số dặm của bạn có thể thay đổi. Các quảng cáo ô tô của Mỹ thường trích dẫn số liệu tiêu thụ nhiên liệu của ô tô, e. g. rằng họ sẽ nhận được 28 dặm cho mỗi gallon. Nhưng điều này luôn phải đi kèm với dòng chữ in nhỏ hợp pháp cảnh báo người đọc rằng họ có thể không hiểu như vậy. Thuật ngữ YMMV hiện được sử dụng theo nghĩa thành ngữ có nghĩa là “kết quả của bạn có thể khác”, e. g. Thời lượng pin trên điện thoại này là 3 ngày, nhưng YMMV

Đôi khi bạn sẽ thấy phạm vi lười biếng được bao bọc trong lệnh gọi danh sách. This forces Python to turn the lazy promise into an actual list:

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
2

11. 19. Danh sách lồng nhau

Danh sách lồng nhau là danh sách xuất hiện dưới dạng một phần tử trong danh sách khác. Trong danh sách này, phần tử có chỉ số 3 là danh sách lồng nhau

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
3

Nếu chúng ta xuất phần tử ở chỉ số 3, chúng ta sẽ nhận được

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
4

Để trích xuất một phần tử từ danh sách lồng nhau, chúng ta có thể tiến hành theo hai bước

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
5

Hoặc chúng ta có thể kết hợp chúng

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
6

Toán tử khung đánh giá từ trái sang phải, vì vậy biểu thức này nhận phần tử thứ 3 của được lồng vào nhau và trích xuất phần tử thứ 1 từ .

11. 20. ma trận

Danh sách lồng nhau thường được dùng để biểu diễn ma trận. Ví dụ, ma trận

có thể được đại diện như

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
7

mx là một danh sách có ba phần tử, trong đó mỗi phần tử là một hàng của ma trận. Chúng ta có thể chọn toàn bộ hàng từ ma trận theo cách thông thường.

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
8

Hoặc chúng ta có thể trích xuất một phần tử từ ma trận bằng cách sử dụng biểu mẫu chỉ số kép

>>> numbers[9-8]
5
>>> numbers[1.0]
Traceback [most recent call last]:
  File "", line 1, in 
TypeError: list indices must be integers, not float
9

Chỉ mục đầu tiên chọn hàng và chỉ mục thứ hai chọn cột. Mặc dù cách biểu diễn ma trận này là phổ biến, nhưng nó không phải là khả năng duy nhất. Một biến thể nhỏ là sử dụng danh sách cột thay vì danh sách hàng. Sau này chúng ta sẽ thấy một giải pháp thay thế triệt để hơn là sử dụng từ điển

11. 21. Bảng chú giải

aliasesNhiều biến chứa tham chiếu đến cùng một đối tượng. cloneĐể tạo một đối tượng mới có cùng giá trị với một đối tượng hiện có. Sao chép tham chiếu đến đối tượng sẽ tạo bí danh nhưng không sao chép đối tượng. dấu phân cách Một ký tự hoặc chuỗi được sử dụng để chỉ ra nơi một chuỗi sẽ được tách ra. phần tửMột trong các giá trị trong danh sách [hoặc chuỗi khác]. Toán tử dấu ngoặc chọn các phần tử của danh sách. Còn được gọi là mục. giá trị dữ liệu bất biếnMột giá trị dữ liệu không thể sửa đổi. Việc gán cho các phần tử hoặc lát [phần phụ] của các giá trị không thay đổi gây ra lỗi thời gian chạy. indexMột giá trị số nguyên cho biết vị trí của một mục trong danh sách. Chỉ số bắt đầu từ 0. itemXem phần tử. listMột tập hợp các giá trị, mỗi giá trị ở một vị trí cố định trong danh sách. Giống như các loại khác str , int , float, etc. there is also a list hàm chuyển đổi kiểu cố gắng biến bất kỳ đối số nào bạn đưa ra thành một danh sách. duyệt danh sáchTruy cập tuần tự từng phần tử trong danh sách. modifierMột hàm thay đổi các đối số của nó bên trong thân hàm. Chỉ các loại có thể thay đổi mới có thể được thay đổi bởi công cụ sửa đổi. giá trị dữ liệu có thể thay đổi Một giá trị dữ liệu có thể được sửa đổi. Các loại của tất cả các giá trị có thể thay đổi là các loại hợp chất. Danh sách và từ điển có thể thay đổi; . danh sách lồng nhauMột danh sách là một phần tử của một danh sách khác. đối tượngMột thứ mà một biến có thể tham chiếu. mẫuMột chuỗi các câu lệnh hoặc một phong cách viết mã gì đó có khả năng áp dụng chung trong một số tình huống khác nhau. Một phần của việc trở thành Nhà khoa học máy tính trưởng thành là học và thiết lập các mẫu và thuật toán hình thành nên bộ công cụ của bạn. Các mẫu thường tương ứng với “khối tư duy” của bạn. PromiseMột đối tượng hứa hẹn sẽ thực hiện một số công việc hoặc cung cấp một số giá trị nếu cuối cùng chúng được cần đến, nhưng nó lại lười biếng thực hiện công việc ngay lập tức. Gọi phạm vi tạo ra một lời hứa. chức năng thuần túy Một chức năng không có tác dụng phụ. Các hàm thuần túy chỉ thực hiện các thay đổi đối với chương trình gọi thông qua các giá trị trả về của chúng. trình tựBất kỳ kiểu dữ liệu nào bao gồm một tập hợp các phần tử được sắp xếp theo thứ tự, với mỗi phần tử được xác định bởi một chỉ mục. tác dụng phụS thay đổi trạng thái của một chương trình được thực hiện bằng cách gọi một hàm. Tác dụng phụ chỉ có thể được tạo ra bởi công cụ sửa đổi. kích thước bước Khoảng cách giữa các phần tử liên tiếp của một chuỗi tuyến tính. Đối số thứ ba [và đối số tùy chọn] của hàm phạm vi được gọi là kích thước bước. Nếu không được chỉ định, nó sẽ mặc định là 1.

11. 22. bài tập

  1. Phản hồi của trình thông dịch Python đối với những điều sau đây là gì?

    >>> numbers[2]
    Traceback [most recent call last]:
      File "", line 1, in 
    IndexError: list index out of range
    
    0

    Ba đối số của hàm phạm vi lần lượt là bắt đầu, dừng và bước. Trong ví dụ này, start lớn hơn stop . Điều gì xảy ra nếu bắt đầu > numbers[2] Traceback [most recent call last]: File "", line 1, in IndexError: list index out of range 2

    Đoạn này có tạo ra một hoặc hai phiên bản rùa không? . alex also change the color of tess? Explain in detail.

  2. Vẽ ảnh chụp nhanh trạng thái cho ab trước đó .

    zs = ["hello", 2.0, 5, [10, 20]]
    
    9

    >>> numbers[2]
    Traceback [most recent call last]:
      File "", line 1, in 
    IndexError: list index out of range
    
    4

  3. Điều gì sẽ là đầu ra của chương trình sau đây?

    1
    2
    3
    4
    5

    >>> numbers[2]
    Traceback [most recent call last]:
      File "", line 1, in 
    IndexError: list index out of range
    
    6

    Cung cấp giải thích chi tiết về kết quả

  4. Danh sách có thể được sử dụng để biểu diễn các vectơ toán học. Trong bài tập này và một số bài tập tiếp theo, bạn sẽ viết các hàm để thực hiện các phép toán tiêu chuẩn trên vectơ. Tạo tập lệnh có tên vectors. py và viết mã Python để vượt qua các bài kiểm tra trong từng trường hợp.

    Viết hàm add_vectors[u, v] nhận vào hai danh sách các số giống nhau .

    zs = ["hello", 2.0, 5, [10, 20]]
    
    9

    >>> numbers[2]
    Traceback [most recent call last]:
      File "", line 1, in 
    IndexError: list index out of range
    
    8

  5. Viết hàm scalar_mult[s, v] nhận vào một số, s, and a list, v and returns the scalar multiple of v by s. :

    zs = ["hello", 2.0, 5, [10, 20]]
    
    9

    1
    2
    3
    4
    0

  6. Viết hàm dot_product[u, v] nhận vào hai danh sách các số giống nhau .

    zs = ["hello", 2.0, 5, [10, 20]]
    
    9

    1
    2
    3
    4
    2

  7. Thêm thử thách cho người thiên về toán học. Viết hàm cross_product[u, v] lấy hai danh sách các số có độ dài 3 và trả về tích chéo của chúng. Bạn nên viết bài kiểm tra của riêng bạn.

  8. Mô tả mối quan hệ giữa " ". tham gia [bài hát. split[]]song trong đoạn mã bên dưới. Chúng có giống nhau đối với tất cả các chuỗi được gán cho bài hát không?

    1

    1
    2
    3
    4
    4

  9. Viết hàm replace[s, old, new] that replaces all occurrences of old with new in a string s:

    1
    2
    3
    4
    5

    1
    2
    3
    4
    6

    Gợi ý. sử dụng các phương thức splitjoin .

  10. Giả sử bạn muốn hoán đổi các giá trị trong hai biến. Bạn quyết định đưa yếu tố này vào một chức năng có thể tái sử dụng và viết mã này

Chủ Đề