Liệt kê các cặp python hiểu

Chương này mô tả chi tiết hơn một số điều bạn đã học và bổ sung thêm một số điều mới.

Nội dung chính Hiển thị

  • 5. Cấu trúc dữ liệu¶
  • 5. 1. Thông tin thêm về Danh sách¶
  • 5. 1. 1. Sử dụng Danh sách làm Ngăn xếp¶
  • 5. 1. 2. Sử dụng Danh sách làm Hàng đợi¶
  • 5. 1. 3. Liệt kê các hiểu¶
  • 5. 1. 4. Hiểu danh sách lồng nhau¶
  • 5. 2. Câu lệnh del¶
  • 5. 3. Bộ và dãy¶
  • 5. 4. Bộ¶
  • 5. 5. Từ điển¶
  • 5. 6. Kỹ thuật vòng lặp¶
  • 5. 7. Thông tin thêm về Điều kiện¶
  • 5. 8. So sánh trình tự và các loại khác¶
  • Video liên quan

5. 1. Thông tin thêm về Danh sách¶

Kiểu dữ liệu danh sách có thêm một số phương thức. Dưới đây là tất cả các phương thức của đối tượng danh sách

danh sách. nối thêm [x]

Thêm một mục vào cuối danh sách. Tương đương với a[len[a]. ] = [x] .

danh sách. mở rộng [có thể lặp lại]

Mở rộng danh sách bằng cách nối thêm tất cả các mục từ có thể lặp lại. Tương đương với a[len[a]. ] = có thể lặp lại .

danh sách. chèn [i , x]

Chèn một mục vào một vị trí nhất định. Đối số đầu tiên là chỉ mục của phần tử cần chèn trước đó, vì vậy a. insert[0, x] chèn vào đầu danh sách và a. insert[len[a], x] tương đương với a. nối thêm[x] .

danh sách. xóa [x]

Xóa mục đầu tiên khỏi danh sách có giá trị bằng x. Nó làm tăng ValueError nếu không có mục đó.

danh sách. pop [[ i ]]

Xóa mục ở vị trí đã cho trong danh sách và trả lại. Nếu không chỉ định chỉ mục, a. pop[] xóa và trả về mục cuối cùng trong danh sách. [Dấu ngoặc vuông xung quanh chữ i trong chữ ký phương thức biểu thị rằng tham số là tùy chọn, không phải bạn nên nhập dấu ngoặc vuông tại vị trí đó. Bạn sẽ thấy ký hiệu này thường xuyên trong Tài liệu tham khảo thư viện Python. ]

danh sách. xóa []

Xóa tất cả các mục khỏi danh sách. Tương đương với del a[. ] .

danh sách. chỉ mục [ x [ , bắt đầu [, end]]]

Trả về chỉ mục dựa trên 0 trong danh sách của mục đầu tiên có giá trị bằng x. Tăng Lỗi giá trị nếu không có mục đó.

Các đối số tùy chọn bắt đầu và kết thúc được hiểu như trong ký hiệu lát cắt và được sử dụng để giới hạn tìm kiếm trong một chuỗi con cụ thể của danh sách. Chỉ mục được trả về được tính tương đối so với phần đầu của chuỗi đầy đủ thay vì đối số bắt đầu

danh sách. đếm [x]

Trả về số lần x xuất hiện trong danh sách

danh sách. sắp xếp [* , phím=None, reverse=False]

Sắp xếp các mục của danh sách tại chỗ [các đối số có thể được sử dụng để tùy chỉnh sắp xếp, xem sorted[] để biết giải thích].

danh sách. đảo ngược []

Đảo ngược các phần tử của danh sách tại chỗ

danh sách. bản sao []

Trả về bản sao nông của danh sách. Tương đương với a[. ] .

Một ví dụ sử dụng hầu hết các phương pháp danh sách

>>> trái cây = ['cam' . , 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana'] >>> fruits.đếm['apple'] 2 >>> fruits.đếm['quýt'] 0 >>> fruits.index['banana'] 3 >>> fruits.index['banana', 4] # Find next banana starting a position 4 6 >>> fruits.đảo ngược[] >>> trái cây ['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange'] >>> fruits.chắp thêm['grape'] >>> fruits ['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape'] >>> fruits.sắp xếp[] >>> trái cây ['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear'] >>> fruits.bốp[] 'lê'

Bạn có thể nhận thấy rằng các phương thức như chèn , xóa or sort that only modify the list have no return value printed they return the default None. 1 This is a design principle for all mutable data structures in Python.

Một điều khác mà bạn có thể nhận thấy là không phải tất cả dữ liệu đều có thể được sắp xếp hoặc so sánh. Chẳng hạn, [None, 'hello', 10] không sắp xếp . Ngoài ra, có một số loại không có quan hệ thứ tự xác định. Ví dụ: 3+4j >> ngăn xếp = [3, 4, 5] >>> stack.chắp thêm[6] > . stack.chắp thêm[7] > . stack [3, 4, 5, 6, 7] >>> stack.bốp[] 7 >>> stack [3, 4, 5, 6] >>> stack.bốp[] 6 >>> stack.bốp[] 5 >>> stack [3, 4]

5. 1. 2. Sử dụng Danh sách làm Hàng đợi¶

Cũng có thể sử dụng danh sách làm hàng đợi, trong đó phần tử đầu tiên được thêm vào là phần tử đầu tiên được lấy ra [nhập trước, xuất trước]; . Mặc dù các thao tác thêm và bật từ cuối danh sách diễn ra nhanh chóng, nhưng việc chèn hoặc bật từ đầu danh sách lại chậm [vì tất cả các phần tử khác phải được dịch chuyển theo một phần tử]

Để triển khai hàng đợi, hãy sử dụng bộ sưu tập. deque được thiết kế để nối và bật nhanh từ cả hai đầu. Ví dụ.

>>> từ bộ sưu tập nhập deque . . . >>> queue = deque[["Eric", "John", "Michael"]] >>> queue.chắp thêm["Terry"] # Terry arrives >>> queue.chắp thêm["Graham"] # Graham arrives >>> queue.popleft[] # Người đến đầu tiên đã rời đi 'Eric'< . >>> queue.popleft[] # Người thứ hai đến bây giờ rời đi 'John'>> queue # Remaining queue in order of arrival deque[['Michael', 'Terry', 'Graham']]

5. 1. 3. Liệt kê các hiểu¶

Khả năng hiểu danh sách cung cấp một cách ngắn gọn để tạo danh sách. Các ứng dụng phổ biến là tạo danh sách mới trong đó mỗi phần tử là kết quả của một số thao tác được áp dụng cho từng phần tử của một chuỗi khác hoặc có thể lặp lại hoặc để tạo một chuỗi con của các phần tử đó thỏa mãn một điều kiện nhất định

Ví dụ: giả sử chúng tôi muốn tạo một danh sách các ô vuông, như

>>> hình vuông = [] >> . for x in range[10]: . hình vuông. chắp thêm[x** . ] ... >>> hình vuông [0, 1, 4, 9, 16, 25, 36, 49, 64,

Lưu ý rằng thao tác này sẽ tạo [hoặc ghi đè] một biến có tên x vẫn tồn tại sau khi vòng lặp kết thúc. Chúng ta có thể tính toán danh sách các ô vuông mà không có bất kỳ tác dụng phụ nào bằng cách sử dụng.

hình vuông = danh sách[bản đồ[lambda x: x**2, range[10]]]

hoặc, tương đương

hình vuông = [x**2 for x in range[10]]

cái nào ngắn gọn và dễ đọc hơn

Việc hiểu danh sách bao gồm các dấu ngoặc chứa một biểu thức theo sau bởi một mệnh đề for , sau đó là 0 hoặc nhiều hơn nữa for or if clauses. The result will be a new list resulting from evaluating the expression in the context of the forif clauses which follow it. For example, this listcomp combines the elements of two lists if they are not equal:

>>> [[x, y< . =] for x in [1,2,3] for y in [3,1,4] if x != y] [[1, 3], [1, 4], [2, 3], [

và nó tương đương với

>>> lược = [] >> . for x in [1,2,3]: . cho y trong [3 . ,1,4]: . nếu x . = y. . lược. chắp thêm[[x, . ]] ... >>> lược [[1, 3], [1, 4], [2, 3],

Lưu ý cách sắp xếp thứ tự của forif .

Nếu biểu thức là một bộ [e. g. [x, y] trong ví dụ trước], nó phải được đặt trong ngoặc đơn.

>>> vec = [-4, -2, 0, 2, 4] >>> # create a new list with the values doubled >>> [x*2 for x in vec] [-8, -4, 0, 4, 8] >>> # filter the list to exclude negative numbers >>> [x for x in vec if x >= 0] [0, 2, 4] >>> # apply a function to all the elements >>> [abs[x] for x in vec] [4, 2, 0, 2, 4] >>> # call a method on each element >>> freshfruit = [' banana', ' loganberry ', 'passion fruit '] >>> [weapon.tước[] để lấy vũ khí . cú pháp không hợp lệ freshfruit] ['banana', 'loganberry', 'passion fruit'] >>> # create a list of 2-tuples like [number, square] >>> [[x, x**2] for x in range[6]] [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25]] >>> # the tuple must be parenthesized, otherwise an error is raised >>> [x, x**2 for x in range[6]] File "", line 1, in [x, x**2 for x in range[6]] ^ SyntaxError: invalid syntax >>> # làm phẳng danh sách bằng cách sử dụng listcomp với hai 'for' >>> vec = [[1,2,3], [4,5,6], [7,8,9]] >>> [num for elem in vec for num in elem] [1, 2, 3, 4, 5, 6, 7, 8, 9]

Khả năng hiểu danh sách có thể chứa các biểu thức phức tạp và các hàm lồng nhau

>>> từ toán học nhập pi >>> [str[round[pi, i]] for i in range[1, 6]] ['3.1', '3.14', '3.142', '3.1416', '3.14159']

5. 1. 4. Hiểu danh sách lồng nhau¶

Biểu thức ban đầu trong cách hiểu danh sách có thể là bất kỳ biểu thức tùy ý nào, bao gồm cả cách hiểu danh sách khác

Xem xét ví dụ sau về ma trận 3x4 được triển khai dưới dạng danh sách 3 danh sách có độ dài 4

>>> ma trận = [ . [1, 2, . 3, 4], .. [5, 6, . 7, 8], .. [9, 10, . 11, 12], .. ]

Việc hiểu danh sách sau đây sẽ chuyển đổi các hàng và cột

>>> [[hàng[i>> đã chuyển đổi = [] >> . for i in range[4]: . đã chuyển đổi. chắp thêm[[hàng[ . ] for row in matrix]] ... >>> chuyển đổi [[1, 5, 9], [2, 6, 10], [3

đến lượt nó cũng giống như

>>> đã chuyển đổi = [] >> . for i in range[4]: . # 3 dòng sau triển khai listcomp lồng nhau . transposed_row = [] . cho hàng trong ma trận. . transposed_row. chắp thêm[hàng[i . ]] .. đã chuyển đổi. chắp thêm[transposed_row] . >>> đã chuyển đổi [[1, 5, 9], [2, 6, 10], [3

Trong thế giới thực, bạn nên ưu tiên các hàm tích hợp sẵn hơn là các câu lệnh luồng phức tạp. Hàm zip[] sẽ hoạt động rất tốt cho trường hợp sử dụng này.

>>> danh sách[zip[>> a = [-1, 1, 66.25, 333, 333 . 5 1234.5] >>> del a[0] >>> a [1, 66.25, 333, 333, 1234.5] >>> del a[2:4] >>> a [1, 66.25, 1234.5] >>> del a[. ] >>> a []

del cũng có thể được sử dụng để xóa toàn bộ biến.

>>> del a

Việc tham chiếu tên a sau đây là lỗi [ít nhất là cho đến khi giá trị khác được gán cho tên đó]. Hãy tìm những cách sử dụng khác cho del sau.

5. 3. Bộ và dãy¶

Chúng tôi thấy rằng danh sách và chuỗi có nhiều thuộc tính chung, chẳng hạn như lập chỉ mục và thao tác cắt. Chúng là hai ví dụ về các loại dữ liệu trình tự [xem Danh sách Loại trình tự, bộ, phạm vi ]. Vì Python là một ngôn ngữ đang phát triển nên các loại dữ liệu trình tự khác có thể được thêm vào. Ngoài ra còn có một kiểu dữ liệu chuỗi tiêu chuẩn khác. tuple.

Ví dụ, một bộ bao gồm một số giá trị được phân tách bằng dấu phẩy

>>> t = 12345, 54321, 'hello!' >>> t[0] 12345 >>> t [12345, 54321, 'hello!'] >>> # Các bộ có thể được lồng vào nhau. . u = t, [ . '], [1, 2, 3, 4, 5]]1, 2, 3, 4, 5] >>> u [[12345, 54321, 'hello!'], [1, 2, 3, 4, 5]] >>> # Bộ dữ liệu là bất biến. . t[0] = . 88888 Traceback [most recent call last]: Tệp " , dòng 1, in TypeError: đối tượng 'tuple' không hỗ trợ gán vật phẩm >>> # nhưng chúng có thể chứa các đối tượng có thể thay đổi. . v = [[1, 2, 3], [3, 2, 1]] >>> v [[1, 2, 3], [3, 2, 1]]

Như bạn thấy, trên các bộ dữ liệu đầu ra luôn được đặt trong dấu ngoặc đơn, do đó các bộ dữ liệu lồng nhau được diễn giải chính xác; . Không thể gán cho các mục riêng lẻ của một bộ, tuy nhiên có thể tạo các bộ chứa các đối tượng có thể thay đổi, chẳng hạn như danh sách

Mặc dù các bộ có vẻ giống với danh sách, nhưng chúng thường được sử dụng trong các tình huống khác nhau và cho các mục đích khác nhau. Các bộ dữ liệu bất biến và thường chứa một chuỗi các phần tử không đồng nhất được truy cập thông qua giải nén [xem sau trong phần này] hoặc lập chỉ mục [hoặc thậm chí theo thuộc tính trong . Danh sách namedtuples]. Lists are có thể thay đổi và các phần tử của chúng thường đồng nhất và được truy cập bằng cách lặp qua danh sách.

Một vấn đề đặc biệt là việc xây dựng các bộ chứa 0 hoặc 1 mục. cú pháp có một số quirks bổ sung để phù hợp với những. Các bộ dữ liệu trống được xây dựng bởi một cặp dấu ngoặc đơn trống; . Xấu xí, nhưng hiệu quả. Ví dụ

>>> trống = [] >>singleton = 'hello', # >> len[empty] 0 >>> len[singleton] 1 >>> singleton ['hello',]

Câu lệnh t = 12345, 54321,< . ' 'hello!' là một ví dụ về đóng gói bộ. các giá trị 12345 , 54321'hello!' được đóng gói cùng nhau trong một bộ. Hoạt động ngược lại cũng có thể.

>>> x, y,>> giỏ = {'apple' . , 'orange', 'apple', 'pear', 'orange', 'banana'} >>> print[basket] # show that duplicates have been removed {'orange', 'banana', 'pear', 'apple'} >>> 'orange' in basket # fast membership testing True >>> 'crabgrass' in basket False >>> # Demonstrate set operations on unique letters from two words ... >>> a = đặt['abracadabra'] >>> b = set['alacazam'] >>> a # unique letters in a {'a', 'r', 'b', 'c', 'd'} >>> a - b # letters in a but not in b {'r', 'd', 'b'} >>> a | b # chữ cái trong a hoặc b hoặc cả hai {'a', 'c', 'r', ' >>> a & b # letters in both a and b {'a', 'c'} >>> a ^ b # letters in a or b but not both {'r', 'd', 'b', 'm', 'z', 'l'}

Tương tự như khả năng hiểu danh sách , khả năng hiểu tập hợp cũng được hỗ trợ.

>>> a = {x>> a {'r', 'd'}

5. 5. Từ điển¶

Một loại dữ liệu hữu ích khác được tích hợp trong Python là từ điển [xem Chính tả các loại ánh xạ ]. Từ điển đôi khi được tìm thấy trong các ngôn ngữ khác dưới dạng bộ nhớ liên kết hoặc mảng liên kết. Không giống như các chuỗi, được lập chỉ mục bởi một dãy số, từ điển được lập chỉ mục bởi các khóa, có thể là bất kỳ loại bất biến nào; . Các bộ có thể được sử dụng làm khóa nếu chúng chỉ chứa các chuỗi, số hoặc bộ; . Bạn không thể sử dụng danh sách làm khóa, vì danh sách có thể được sửa đổi tại chỗ bằng cách sử dụng phép gán chỉ mục, phép gán lát hoặc các phương thức như append[]extend[].

Tốt nhất nên coi từ điển là một bộ khóa. các cặp giá trị, với yêu cầu các khóa là duy nhất [trong một từ điển]. Một cặp dấu ngoặc nhọn tạo ra một từ điển rỗng. {} . Đặt danh sách khóa được phân tách bằng dấu phẩy. cặp giá trị trong dấu ngoặc nhọn thêm khóa ban đầu. cặp giá trị vào từ điển; .

Các thao tác chính trên từ điển là lưu trữ giá trị bằng một số khóa và trích xuất giá trị được cung cấp cho khóa. Cũng có thể xóa khóa. cặp giá trị với del . Nếu bạn lưu trữ bằng khóa đã được sử dụng, giá trị cũ được liên kết với khóa đó sẽ bị quên. Có lỗi khi trích xuất một giá trị bằng khóa không tồn tại.

Thực hiện list[d] trên từ điển trả về danh sách tất cả các khóa được sử dụng trong từ điển, theo thứ tự chèn [nếu bạn muốn . Để kiểm tra xem một khóa đơn có trong từ điển hay không, hãy sử dụng từ khóa sorted[d] instead]. To check whether a single key is in the dictionary, use the in .

Đây là một ví dụ nhỏ sử dụng từ điển

>>> tel = {'jack' . : 4098, 'sape'. 4139} >>> tel . 4098, 'hướng dẫn'. 4127, 'irv'. 4127}'guido'] = 4127 >>> tel {'jack': 4098, 'sape': 4139, 'guido': 4127} >>> tel['jack'] 4098 >>> del tel['sape'] >>> tel['irv'] = 4127 >>> tel {'jack': 4098, 'guido': 4127, 'irv': 4127} >>> danh sách[tel] ['jack', 'guido', 'irv'] >>> sorted[tel] ['guido', 'irv', 'jack'] >>> 'guido' in tel True >>> 'jack' not in tel False

Trình tạo dict[] xây dựng từ điển trực tiếp từ chuỗi các cặp khóa-giá trị.

>>> dict[[['sape', 4139], ['guido', 4127], ['jack', 4098]]] {'sape': 4139, 'guido': 4127, 'jack': 4098}

Ngoài ra, khả năng hiểu chính tả có thể được sử dụng để tạo từ điển từ các biểu thức khóa và giá trị tùy ý

>>> {x. x**2 cho . 4, 4. 16, 6. 36} in [2, 4, 6]} {2: 4, 4: 16, 6: 36}

Khi các khóa là các chuỗi đơn giản, đôi khi việc chỉ định các cặp bằng cách sử dụng các đối số từ khóa sẽ dễ dàng hơn

>>> dict[sape=4139, guido=4127, jack=4098] {'sape': 4139, 'guido': 4127, 'jack': 4098}

5. 6. Kỹ thuật vòng lặp¶

Khi lặp qua các từ điển, khóa và giá trị tương ứng có thể được truy xuất cùng lúc bằng cách sử dụng phương thức items[] .

>>> hiệp sĩ = {'gallahad' . : 'tinh khiết', 'robin'. 'người dũng cảm'} >>> k, v in knights.mặt hàng[]. . in[k, v . ] ... buổi dạ tiệcquần cướp dũng cảm robin the brave

Khi lặp qua một chuỗi, chỉ số vị trí và giá trị tương ứng có thể được truy xuất cùng lúc bằng cách sử dụng hàm enumerate[] .

>>> cho i, vv . v . v . v . v . v . v . v . in enumerate[['tic', 'tac', 'toe']]: . in[i, v . ] ... 0 nhịp 1 nhịp 2 ngón

Để lặp qua hai hoặc nhiều chuỗi cùng lúc, các mục nhập có thể được ghép nối với hàm zip[] .

>>> câu hỏi = ['name' . , 'quest', 'favorite color'] >>> answers = ['lancelot', 'the holy grail', 'blue'] >>> for q, a in zip[questions, answers]: . in['Bạn là gì {0}? It is {1}.'. định dạng[q, a . ]] ... Tên bạn là gì? . Nhiệm vụ của bạn là gì? . Màu yêu thích của bạn là gì? .

Để lặp ngược lại một chuỗi, trước tiên hãy chỉ định chuỗi theo hướng thuận rồi gọi hàm reversed[] .

>>> cho i trong đảo ngược[range[1, 10, 2]]: . in[i] . 9 7 5 3 1

Để lặp qua một chuỗi theo thứ tự đã sắp xếp, hãy sử dụng hàm sorted[] để trả về một danh sách đã sắp xếp mới mà không thay đổi nguồn.

>>> giỏ = ['apple' . , 'orange', 'apple', 'pear', 'orange', 'banana'] >>> for i in sorted[basket]: . in[i] . táo táo chuối cam cam pear

Sử dụng set[] trên một chuỗi sẽ loại bỏ các phần tử trùng lặp. Việc sử dụng sorted[] kết hợp với set[] trên một .

>>> giỏ = ['apple' . , 'orange', 'apple', 'pear', 'orange', 'banana'] >>> for f in sorted[set[basket]]: . in[f] . táo chuối cam

Đôi khi bạn muốn thay đổi một danh sách trong khi bạn đang lặp lại danh sách đó;

>>> nhập toán học >>> raw_data . 2 = [56.2, phao['NaN'], 51.7, 55. 3, 52. 5, phao['NaN'], 47.8] >>> filtered_data = [] >>> for value in raw_data: . nếu không toán học. isnan[giá trị]. . filtered_data. chắp thêm[giá trị] . >>> filtered_data [56. 2, 51. 7, 55. 3, 52. 5, 47. 8]

5. 7. Thông tin thêm về Điều kiện¶

Các điều kiện được sử dụng trong câu lệnh whileif có thể .

Các toán tử so sánh innot innotinnotinnotinnotinnotinnotinnotinnotinnotin check whether a value occurs [does not occur] in a sequence. The operators isis not compare whether two objects are really the same object. All comparison operators have the same priority, which is lower than that of all numerical operators.

Có thể xâu chuỗi các phép so sánh. Ví dụ: a >> chuỗi1, chuỗi2,>> non_null = string1 or string2 or string3 >>> non_null 'Trondheim'

Lưu ý rằng trong Python, không giống như C, việc gán bên trong các biểu thức phải được thực hiện rõ ràng bằng toán tử hải mã . = . Điều này tránh được một loại vấn đề phổ biến gặp phải trong các chương trình C. nhập = vào một biểu thức khi dự định == .

5. 8. So sánh trình tự và các loại khác¶

Các đối tượng trình tự thường có thể được so sánh với các đối tượng khác có cùng loại trình tự. Việc so sánh sử dụng thứ tự từ điển. đầu tiên, hai mục đầu tiên được so sánh và nếu chúng khác nhau thì điều này sẽ quyết định kết quả của việc so sánh; . Nếu hai mục được so sánh là các chuỗi cùng loại thì việc so sánh từ điển được thực hiện theo cách đệ quy. Nếu so sánh tất cả các phần tử của hai dãy bằng nhau thì hai dãy được coi là bằng nhau. Nếu một dãy là dãy con ban đầu của dãy kia, thì dãy ngắn hơn là dãy nhỏ hơn [ít hơn]. Thứ tự từ điển cho các chuỗi sử dụng số điểm mã Unicode để sắp xếp các ký tự riêng lẻ. Một số ví dụ so sánh giữa các dãy cùng loại

Chủ Đề