2010-05-27 18 views

Trả lời

10
  • list nhiều hơn mảng đồng bằng. Bạn có thể khởi tạo chúng mà không đưa ra số lượng mục. Bạn có thể append/push cho họ, bạn có thể remove/pop/del mục từ họ, bạn có thể có danh sách các loại đối tượng khác nhau (ví dụ: [1,'e', [3]]), bạn có thể có danh sách đệ quy ... nhận danh sách mới chỉ với một vài mục.
  • slice là loại đối tượng được sử dụng "phía sau hậu trường" để xử lý việc cắt mở rộng ở dạng a[start:stop:step], như help(slice) tiết lộ.

"Chuỗi" không phải là một đối tượng, giống như giao diện không chính thức một số đối tượng như thực hiện list.

+4

Các nhà phát triển Python nghĩ khác: ['list': Trình tự Python được xây dựng sẵn. Mặc dù tên của nó giống với một mảng trong các ngôn ngữ khác hơn là một danh sách liên kết vì truy cập vào các phần tử là 'O (1)'.] (Http://docs.python.org/py3k/glossary.html#term- danh sách) – SilentGhost

+1

Có lẽ một tương tự C++ tốt hơn là std :: vector, ngoại trừ dị. –

3
  • danh sách là một loại chuỗi, tương tự như một mảng

  • chuỗi loại mô tả một superset chức năng:

Có sáu loại chuỗi: chuỗi, Chuỗi Unicode, danh sách, bộ dữ liệu, bộ đệm và đối tượng xrange.

  • lát là một ký hiệu cho subarrays (hoặc chuỗi con, cũng)

Read more ... http://docs.python.org/glossary.html

2

Nói đúng ra, một lát là một loại mà đại diện cho một loạt các chỉ số, ví dụ một sự khởi đầu, dừng lại và một bước. Một lát không phải là một loại container. Bạn có thể sử dụng một slice để lập chỉ mục một danh sách, dẫn đến một danh sách mới là một bản sao của một danh sách con của danh sách gốc.

Danh sách khác với mảng C++ ở chỗ chúng không đồng nhất; các phần tử không bắt buộc phải cùng loại. Và như MYYN đã chỉ ra, "trình tự" không phải là một loại Python ở tất cả mà là một mô tả về một loạt các loại built-in.

5

Danh sách là một chuỗi nhưng chuỗi không nhất thiết là danh sách. Một chuỗi là bất kỳ loại nào hỗ trợ giao diện trình tự ("giao thức"). Điều này được thực hiện bằng cách gõ vịt thay vì thông qua một hệ thống phân cấp thừa kế nghiêm ngặt. Lưu ý rằng các trình tự là các thùng chứa, nhưng các thùng chứa không nhất thiết là trình tự. (trình tự, tốt, tuần tự!)

Xem http://docs.python.org/library/stdtypes.html#sequence-types-str-unicode-list-tuple-buffer-xrange đối tượng

Slice thường được tạo ra ngầm qua đường cú pháp (foo[2:5]) và cung cấp cho các container loại phương pháp đặc biệt (chẳng hạn như __getitem__) mà bạn có thể ghi đè lên. Nói chung, bạn sẽ không phải đối phó với các lát trừ khi bạn tạo các chuỗi/vùng chứa của riêng mình.

Xem http://docs.python.org/reference/datamodel.html#specialnames

Danh sách có thể so sánh với mảng. Tôi không chắc chắn, nhưng tôi nghĩ rằng nó được thực hiện trong cPython như là một mảng động mở rộng. Tuy nhiên, giao diện làm cho nó trở nên giống với C++ STL Vector hơn là một mảng cũ đơn giản.

33

Bạn đang trộn mọi thứ rất khác nhau trong câu hỏi của bạn, vì vậy tôi sẽ chỉ cần trả lời một câu hỏi khác nhau ;-p

Bạn đang hỏi về một trong những giao diện quan trọng nhất trong Python: iterable - đó là về cơ bản bất cứ điều gì bạn có thể sử dụng như for elem in iterable.

iterable có ba hậu duệ: sequence, generatormapping.

  • Một chuỗi là một iterable với truy cập ngẫu nhiên. Bạn có thể yêu cầu bất kỳ mục nào của chuỗi mà không phải tiêu thụ các vật phẩm trước đó. Với thuộc tính này, bạn có thể tạo slices, cung cấp cho bạn nhiều hơn một phần tử cùng một lúc. Một lát có thể cung cấp cho bạn một hậu tố: seq[from:until] và mọi mục thứ n: seq[from:until:nth]. list, tuplestr tất cả đều là chuỗi.

  • Nếu quyền truy cập được thực hiện qua các phím thay vì vị trí số nguyên, bạn có ánh xạ. dict là ánh xạ cơ bản.

  • Lặp lại cơ bản nhất là máy phát điện . Nó không hỗ trợ truy cập ngẫu nhiên và do đó không cắt. Bạn phải tiêu thụ tất cả các mục theo thứ tự chúng được đưa ra. Máy phát điện thường chỉ tạo các mục của chúng khi bạn lặp lại chúng. Cách phổ biến để tạo generators là biểu thức trình tạo. Chúng trông giống hệt như việc hiểu danh sách, ngoại trừ với các dấu ngoặc tròn, ví dụ: (f(x) for x in y). Việc gọi một hàm sử dụng từ khóa yield cũng sẽ trả về một trình tạo.

Bộ điều hợp chung cho tất cả các vòng lặp là trình lặp. iterators có cùng giao diện với loại cơ bản nhất mà họ hỗ trợ, generator. Chúng được tạo ra một cách rõ ràng bằng cách gọi iter trên một iterable và được sử dụng ngầm trong tất cả các loại cấu trúc lặp.

+0

Tôi thích đề cập đến máy phát điện trong câu trả lời này. Hãy suy nghĩ về "lười biếng" và "vô hạn". – Donald

Các vấn đề liên quan