Sự khác nhau giữa các loại dữ liệu Python tích hợp sau: danh sách, trình tự và slice? Như tôi thấy, cả ba cơ bản đại diện cho những gì C++ và Java gọi mảng.Sự khác biệt giữa danh sách, trình tự và lát bằng Python?
Trả lời
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ạnga[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
.
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
Có lẽ một tương tự C++ tốt hơn là std :: vector, ngoại trừ dị. –
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
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.
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.
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
, generator
và mapping
.
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
,tuple
vàstr
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óayield
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.
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
- 1. sao chép danh sách python: có sự khác biệt giữa [cũ] và danh sách (cũ) không?
- 2. Sự khác biệt thực tế giữa Danh sách và IEnumerable
- 3. Whats sự khác biệt giữa danh sách [-1:] [0] và danh sách [len (danh sách) -1]?
- 4. Sự khác biệt giữa Smalltalk và python?
- 5. Sự khác biệt giữa dir (…) và vars (…) .keys() bằng Python?
- 6. Sự khác biệt giữa trả lại và in bằng python?
- 7. Sự khác biệt giữa danh sách và tuple (trừ bất biến) trong Python?
- 8. Sự khác biệt giữa Danh sách <T> và Danh sách <object>?
- 9. Python: Sự khác biệt giữa bộ lọc (chức năng, trình tự) và bản đồ (chức năng, trình tự)
- 10. Bash - Sự khác biệt giữa hai danh sách
- 11. sự khác biệt giữa python 2.7.3 và python 3.3
- 12. Sự khác nhau giữa Danh sách và mảng
- 13. Sự khác biệt giữa = và: =
- 14. Sự khác biệt giữa CHOICE_MODE_MULTIPLE và CHOICE_MODE_MULTIPLE_MODAL?
- 15. Sự khác biệt giữa getApplicationContext và classname.this
- 16. dtypes. Sự khác nhau giữa S1 và S2 bằng Python
- 17. Bất kỳ sự khác biệt nào giữa dir() và locals() bằng Python?
- 18. Sự khác nhau giữa Danh sách và ArrayList là gì?
- 19. Python - Sự khác biệt giữa các thành phần của danh sách
- 20. Sự khác biệt giữa LIST_HEAD_INIT và INIT_LIST_HEAD
- 21. Sự khác biệt giữa 'ký tự' và 'octet' trong băm
- 22. Sự khác biệt giữa Nhiều Nếu và Elif của Python
- 23. Sự khác biệt giữa Python urllib.urlretrieve() và wget
- 24. Sự khác biệt giữa $ (...) và `...`
- 25. Sự khác biệt giữa. và #
- 26. Sự khác biệt giữa $ * và $ @
- 27. Sự khác biệt giữa ". +" Và ". +?"
- 28. Sự khác biệt giữa "**/* /" và "** /"?
- 29. So sánh hai danh sách và trả lại giá trị khác biệt và sự khác biệt
- 30. Sự khác biệt giữa mảng ký tự và con trỏ
Python [tài liệu có định nghĩa] (http://docs.python.org/glossary.html). – SilentGhost