Hướng dẫn how to store a list of strings in python - cách lưu trữ danh sách chuỗi trong python

Nghĩa trang phần mềm: Lưu trữ nhiều giá trị trong danh sách

Bài học này lưu trữ nhiều giá trị trong danh sách, là bài học 03 từ nghề mộc phần mềm (lập trình với Python, 2016).(“Programming with Python” 2016).

Tổng quan:

Câu hỏi

  • Làm thế nào tôi có thể lưu trữ nhiều giá trị cùng nhau?

Mục tiêu

  • Giải thích danh sách là gì.
  • Tạo và chỉ mục danh sách các giá trị đơn giản.

Tóm tắt điểm chính

  • 1
    3
    5
    7
    3 tạo ra một danh sách.
  • Danh sách được lập chỉ mục và cắt theo cách tương tự như chuỗi và mảng.
  • Danh sách có thể thay đổi (nghĩa là, giá trị của chúng có thể được thay đổi tại chỗ).mutable (i.e., their values can be changed in place).
  • Chuỗi là bất biến (nghĩa là, các ký tự trong chúng không thể thay đổi).immutable (i.e., the characters in them cannot be changed).

Cũng giống như một vòng lặp là một cách để thực hiện các hoạt động nhiều lần, một danh sách là một cách để lưu trữ nhiều giá trị. Không giống như các mảng Numpy, các danh sách được tích hợp vào ngôn ngữ (vì vậy chúng tôi không phải tải một thư viện để sử dụng chúng).

Tạo 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:

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

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

Danh sách chỉ mục

Đến bây giờ, chúng ta biết rằng Python thích bắt đầu đếm bằng 0

1
3
5
7
4 là mục đầu tiên của Cameron như chúng ta đã thấy trước đây với
1
3
5
7
5 chẳng hạn.

Theo cách tương tự, các mục trong danh sách được lập chỉ mục bắt đầu bằng 0

1
3
5
7
4; Mục cuối cùng được tham chiếu là
1
3
5
7
7.

print('first and last:', odds[0], odds[-1])

first and last: 1 7

Và nếu chúng ta lặp qua một danh sách, biến vòng lặp được gán các phần tử một lần:

for number in odds:
    print(number)

1
3
5
7

Có một sự khác biệt quan trọng giữa danh sách và chuỗi: chúng ta có thể thay đổi các giá trị trong 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ụ:

Thay đổi giá trị của mục danh sách

Có một sự khác biệt quan trọng giữa danh sách và chuỗi: chúng ta có thể thay đổi các giá trị trong 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ụ: trong danh sách, chúng tôi có thể thay đổi một trong các yếu tố có giá trị mới. Trong trường hợp này, chúng tôi sẽ thay thế phần tử thứ hai trong danh sách (do đó được lập chỉ mục là

1
3
5
7
8 nếu
1
3
5
7
4 là phần đầu tiên) với giá trị mới:
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
0 sẽ được thay thế bằng
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
1:

names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])

Việc thay thế phần tử ____62 của Danh sách

names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
3 đã thành công.list
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
3 was successful.

Do đó, một danh sách được cho là có thể thay đổi.mutable.

Mặt khác, nếu chúng ta có một biến gọi là

names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
4, chúng ta không thể thay đổi bất kỳ phần tử riêng lẻ nào của biến như trong ví dụ này, nơi chúng ta cố gắng thay thế
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
5 cho
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
6 trong
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
1; Điều này sẽ gây ra lỗi:variable called
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
4 we cannot change any of the individual elements of the variable as in this example where we try to substitute a
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
5 for the
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
6 in
names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name
print('`names` is originally:', names)
names[1] = 'Darwin' # correct the name
print('final value of `names`:', names)
1; this will cause an error:

name = 'Darwin'
name[0] = 'd'

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
      1 name = 'Darwin'
----> 2 name[0] = 'd'

TypeError: 'str' object does not support item assignment

Do đó, một biến được cho là bất biến.immutable.

Có thể thay đổi hoặc bất biến

Ch-Ch-Ch-Changes

Dữ liệu có thể được 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.mutable, while data which cannot be modified is called immutable.

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ố, nhưng khi chúng tôi muốn thay đổi giá trị của một chuỗi hoặc biến số, chúng tôi chỉ có thể thay thế giá trị cũ bằng một giá trị hoàn toàn mới.

Danh sách và mảng là có thể thay đổi.

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

Hãy cẩn thận khi sửa đổi dữ liệu tại chỗ. Nếu hai biến đề cập đến cùng một danh sách và bạn sửa đổi giá trị danh sách, nó sẽ thay đổi cho cả hai biến! Nếu bạn muốn các biến có giá trị có thể thay đổi độc lập, bạn phải tạo một bản sao của giá trị khi bạn gán nó.. If two variables refer to the same list, and you modify the list value, it will change for both variables! If you want variables with mutable values to be independent, you must make a copy of the value when you assign it.

Do những cạm bẫy như thế này, mã sửa đổi dữ liệu có thể khó hiểu hơn. Tuy nhiên, việc sửa đổi cấu trúc dữ liệu lớn thường hiệu quả hơn nhiều so với việc tạo ra một bản sao sửa đổi cho mọi thay đổi nhỏ.

Bạn nên xem xét cả hai khía cạnh này khi viết mã của bạn.

Danh sách lồng nhau

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

Ví dụ, chúng tôi có thể đại diện cho các sản phẩm trong kệ của một cửa hàng tạp hóa nhỏ và sau đó chúng tôi có thể sử dụng một phương pháp lập chỉ mục (bắt đầu với

1
3
5
7
4 như bình thường trong Python) để trích xuất bất kỳ danh sách phụ nào theo nhiều cách khác nhau. Lưu ý chỉ số kép của người Viking ____ ____69 để trích xuất danh sách đầu tiên từ
('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
0 và sau đó trích xuất mục đầu tiên từ danh sách trích xuất đó:

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

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

Hình ảnh này được cung cấp bởi Hadley Wickham đưa ra một ví dụ trực quan về các ý tưởng về danh sách và những người phụ mà chúng tôi vừa khám phá:

Hình 1.

Minh họa danh sách, và các mục iDexed.

Sửa đổi danh sách: ('`names` is originally:', ['Newton', 'Darwing', 'Turing']) ('final value of `names`:', ['Newton', 'Darwin', 'Turing'])1, ('`names` is originally:', ['Newton', 'Darwing', 'Turing']) ('final value of `names`:', ['Newton', 'Darwin', 'Turing'])2, ('`names` is originally:', ['Newton', 'Darwing', 'Turing']) ('final value of `names`:', ['Newton', 'Darwin', 'Turing'])3

('`names` is originally:', ['Newton', 'Darwing', 'Turing']) ('final value of `names`:', ['Newton', 'Darwin', 'Turing'])4 (thêm) vào danh sách hiện có:

Hãy để lại tái tạo danh sách

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
5 và sau đó thêm một mục nữa sau khi danh sách được tạo.

Chúng tôi gặp một lần nữa ký hiệu dấu chấm của người Viking mà chúng tôi đã thấy trước đây với các thuộc tính lệnh thư viện.

Cấu trúc lệnh dựa trên các thuộc tính của danh sách được xác định trước Wihtin Python. Nói cách khác, một danh sách Python về tự nhiên có các thuộc tính vốn có mà bạn có thể liệt kê với lệnh

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
6 mà chúng tôi đã thấy trước đó.based on properties of lists predefined wihtin Python. In other words, a Python list by nature has inherent properties that you can list with the
('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
6 command we saw before.

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
1 sẽ là một trong những thuộc tính và do đó, lệnh
('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
8 sẽ là một phương thức tích hợp trên mạng để nối (thêm) vào danh sách hiện có
('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
5.

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

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

Lưu ý: Một phương thức khác để thêm một mục ở cuối danh sách là sử dụng toán hạng

name = 'Darwin'
name[0] = 'd'
0. Do đó, mã cũng có thể được viết là:

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

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

('`names` is originally:', ['Newton', 'Darwing', 'Turing']) ('final value of `names`:', ['Newton', 'Darwin', 'Turing'])2 Xóa một mục:

Phương thức để loại bỏ một mục sử dụng lệnh

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
2 và chỉ định một mục được lập chỉ mục. Theo nghĩa đó, một chế độ hoạt động khác với chúng ta vừa thấy với
('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
8.

Hãy để lại danh sách

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
5 dài hơn và sau đó xóa mục đầu tiên:

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

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

Mục này cũng có thể ở giữa danh sách, ví dụ như phần tử thứ 3 (do đó chỉ mục

name = 'Darwin'
name[0] = 'd'
5.) Chúng tôi xây dựng lại danh sách
('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
5 để bắt đầu lại:

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

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

Đảo ngược một danh sách với name = 'Darwin' name[0] = 'd'7

Ở đây, một lần nữa phương thức sử dụng phương thức ký hiệu DOT DOT như một phần của thuộc tính vốn có của danh sách Python (sử dụng

name = 'Darwin'
name[0] = 'd'
8 để xem lại danh sách nếu bạn muốn.)

Chúng tôi bắt đầu lại với danh sách

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
5 được đổi mới và sau đó đảo ngược nó với thuộc tính Danh sách tích hợp
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
      1 name = 'Darwin'
----> 2 name[0] = 'd'

TypeError: 'str' object does not support item assignment
0:

print('first and last:', odds[0], odds[-1])
0

print('first and last:', odds[0], odds[-1])
1

Gây rắc rối

Mặc dù sửa đổi tại chỗ, rất hữu ích khi nhớ rằng Python xử lý các danh sách theo một cách hơi phản trực giác.

Nếu chúng tôi lập một danh sách và (cố gắng) sao chép nó sau đó sửa đổi tại chỗ, chúng tôi có thể gây ra tất cả các loại rắc rối. Trong mã bên dưới, chúng tôi tạo danh sách

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
5 và sau đó tạo một bản sao có tên
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
      1 name = 'Darwin'
----> 2 name[0] = 'd'

TypeError: 'str' object does not support item assignment
2 mà sau này chúng tôi sửa đổi bằng cách thêm phần tử
name = 'Darwin'
name[0] = 'd'
5 với
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
      1 name = 'Darwin'
----> 2 name[0] = 'd'

TypeError: 'str' object does not support item assignment
4 (tất nhiên là không và số lẻ nhưng là số nguyên tố.)

Khi làm như vậy, danh sách

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
5 ban đầu cũng sẽ được sửa đổi:

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

print('first and last:', odds[0], odds[-1])
3

Do đó, chúng tôi đã vô tình thêm

name = 'Darwin'
name[0] = 'd'
5 vào danh sách
('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
5.

Đ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 để tham khảo cùng một danh sách. Xem đoạn tiếp theo để biết cách an toàn để sao chép danh sách.

Sao chép một danh sách đơn giản một cách an toàn

Nếu tất cả những gì chúng tôi muốn làm là sao chép danh sách (đơn giản), chúng tôi có thể sử dụng chức năng danh sách, vì vậy chúng tôi không sửa đổi danh sách mà chúng tôi không có ý. Sự khác biệt là thay vì viết

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
      1 name = 'Darwin'
----> 2 name[0] = 'd'

TypeError: 'str' object does not support item assignment
8, chúng tôi tạo một danh sách mới với
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
 in ()
      1 name = 'Darwin'
----> 2 name[0] = 'd'

TypeError: 'str' object does not support item assignment
9:

print('first and last:', odds[0], odds[-1])
4

print('first and last:', odds[0], odds[-1])
5

Trong trường hợp này, danh sách ban đầu

('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
5 đã an toàn trước mọi sửa đổi.

Điều này khác với cách các biến hoạt động trong Bài 1, và tương tự như cách một bảng tính hoạt động.

Kiểm tra sự hiểu biết của bạn:

Biến một chuỗi thành một danh sách

Sử dụng một vòng lặp để chuyển đổi chuỗi Hello Hello thành một danh sách các chữ cái:“hello” into a list of letters:

print('first and last:', odds[0], odds[-1])
6

Gợi ý: Bạn có thể tạo một danh sách trống như thế này:

Giải pháp được cung cấp như sau:

  • Tạo một danh sách trống có tên
    ('odds are:', [1, 3, 5, 7])
    01
  • Mở vòng lặp
    ('odds are:', [1, 3, 5, 7])
    02 với biến được khai báo
    ('odds are:', [1, 3, 5, 7])
    03 trong trích dẫn.
  • Sử dụng từ khóa
    ('odds are:', [1, 3, 5, 7])
    04 làm biến vòng lặp.
    ('odds are:', [1, 3, 5, 7])
    04 đại diện cho các ký tự (chữ cái) một lần
  • Sử dụng thuộc tính
    ('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
    ('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
    1 được tích hợp trong tất cả danh sách Python để thêm
    ('odds are:', [1, 3, 5, 7])
    04 ở cuối danh sách
  • Khi vòng lặp được hoàn thành, danh sách cuối cùng được in.

print('first and last:', odds[0], odds[-1])
7

print('first and last:', odds[0], odds[-1])
8

Điều gì có thể được cải thiện hoặc thay đổi?

  1. Chuỗi Hello Hello, là một bộ phận tích hợp, nhưng có thể được tạo một biến thay thế. Điều này sẽ làm cho phương pháp linh hoạt và có thể thay đổi hơn bằng cách thay đổi giá trị của biến, ở đây
    ('odds are:', [1, 3, 5, 7])
    08.

print('first and last:', odds[0], odds[-1])
9

print('first and last:', odds[0], odds[-1])
8

Chúng ta có thể đi xa hơn nữa trong việc trừu tượng hóa và sử dụng thêm một biến

('odds are:', [1, 3, 5, 7])
09 để lưu trữ tạm thời giá trị của
('odds are:', [1, 3, 5, 7])
04 và sau đó sử dụng phương thức
name = 'Darwin'
name[0] = 'd'
0 thay vì phương pháp
('`names` is originally:', ['Newton', 'Darwing', 'Turing'])
('final value of `names`:', ['Newton', 'Darwin', 'Turing'])
1 như chúng ta đã thấy trước đây:

first and last: 1 7
1

print('first and last:', odds[0], odds[-1])
8

Lưu ý: Sử dụng

('odds are:', [1, 3, 5, 7])
13 Trước đây làm tiền tố cho một tên biến là một ý tưởng tốt để làm rõ thực tế đó rằng bạn đã tạo nên tên biến đó và nó không được tích hợp trong chương trình Python.

Cắt (tập hợp) một danh sách

Các tập hợp danh sách và chuỗi có thể được truy cập bằng cách chỉ định phạm vi giá trị trong ngoặc, tương tự như cách chúng tôi truy cập phạm vi vị trí trong một mảng numpy. Điều này thường được gọi là cắt lát của người dùng danh sách/chuỗi.Numpy array. This is commonly referred to as “slicing” the list/string.

Mã bên dưới hiển thị các phương thức cắt cho một biến

('odds are:', [1, 3, 5, 7])
14 bằng cách lấy 10 chữ cái đầu tiên (từ các vị trí
1
3
5
7
4 đến
('odds are:', [1, 3, 5, 7])
16.)

Phân đoạn tiếp theo lấy phần khác của biến, từ các vị trí

('odds are:', [1, 3, 5, 7])
17 đến
('odds are:', [1, 3, 5, 7])
18.

Phân đoạn tiếp theo tạo một tập hợp con của một danh sách, bắt đầu tại vị trí

('odds are:', [1, 3, 5, 7])
19 (nhưng được lập chỉ mục là
name = 'Darwin'
name[0] = 'd'
5 vì
1
3
5
7
4 là đầu tiên.)

Phân đoạn cuối cùng in mục cuối cùng từ một danh sách có vị trí

1
3
5
7
7.

first and last: 1 7
3

first and last: 1 7
4

Tập thể dục: cắt từ cuối

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

first and last: 1 7
5

first and last: 1 7
6

Giải pháp của bạn có hoạt động bất kể bạn biết trước độ dài của chuỗi hay danh sách (ví dụ: 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ác độ dài khác nhau)? Nếu không, hãy cố gắng thay đổi cách tiếp cận của bạn để làm cho nó mạnh mẽ hơn.

Bài tập: Những lát không liên tục

Cho đến nay, chúng tôi đã thấy cách sử dụng cắt lát để lấy các khối liên tiếp từ một chuỗi. Nhưng điều gì sẽ xảy ra nếu chúng ta muốn lấy một tập hợp các mục nhập không phải là người cạnh nhau trong chuỗi?

Bạn có thể đạt được điều này bằng cách cung cấp một đối số thứ ba cho phạm vi trong khung, đượ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 thứ ba trong danh sách:step size. The example below shows how you can take every third entry in a list:

first and last: 1 7
7

first and last: 1 7
8

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

first and last: 1 7
9

for number in odds:
    print(number)
0

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 Chuỗi trong một khu vườn Octopus trong bóng râm

for number in odds:
    print(number)
1

for number in odds:
    print(number)
2

Nếu bạn muốn lấy một lát từ đầu chuỗi, bạn có thể bỏ qua chỉ mục đầu tiên trong phạm vi:

for number in odds:
    print(number)
3

for number in odds:
    print(number)
4

Và tương tự, bạn có thể bỏ qua chỉ số kết thúc trong phạm vi để lấy một lát vào cuối chuỗi:

for number in odds:
    print(number)
5

for number in odds:
    print(number)
6

Tập thể dục: Trao đổi

for number in odds:
    print(number)
7

for number in odds:
    print(number)
8

So với:

for number in odds:
    print(number)
9

for number in odds:
    print(number)
8

Họ luôn luôn làm điều tương tự? Bạn thấy dễ đọc nào hơn?

Tập thể dục: Quá tải

('odds are:', [1, 3, 5, 7])
23 thường có nghĩa là bổ sung, nhưng khi được sử dụng trên các chuỗi hoặc danh sách, điều đó có nghĩa là liên kết với nhau. Cho rằng, bạn nghĩ gì về toán tử nhân
('odds are:', [1, 3, 5, 7])
24 trong danh sách? Cụ thể, đầu ra của mã sau là gì?
usually means addition, but when used on strings or lists, it means “concatenate”. Given that, what do you think the multiplication operator
('odds are:', [1, 3, 5, 7])
24 does on lists? In particular, what will be the output of the following code?

1
3
5
7
1

Chọn một đầu ra từ danh sách:

1
3
5
7
2

Thuật ngữ kỹ thuật cho điều này là quá tải toán tử: một toán tử duy nhất, như

('odds are:', [1, 3, 5, 7])
23 hoặc
('odds are:', [1, 3, 5, 7])
24, có thể làm những việc khác nhau tùy thuộc vào những gì nó áp dụng.