2008-08-05 46 views

Trả lời

30

Từ Python FAQ:

Lists và các bộ, trong khi tương tự ở nhiều khía cạnh, thường được sử dụng theo những cách hoàn toàn khác nhau. Tuples có thể được coi là tương tự như bản ghi Pascal hoặc cấu trúc C; chúng là những tập hợp nhỏ các dữ liệu liên quan có thể có các loại khác nhau được vận hành như một nhóm. Ví dụ, một tọa độ Descartes được biểu diễn một cách thích hợp như một bộ gồm hai hoặc ba số.

Danh sách, mặt khác, giống như mảng ở các ngôn ngữ khác. Họ có xu hướng giữ một số lượng khác nhau của các đối tượng tất cả đều có cùng một loại và được điều hành trên từng người một.

Thông thường theo quy ước, bạn sẽ không chọn danh sách hoặc bộ dữ liệu chỉ dựa trên tính đột biến (im) của nó. Bạn sẽ chọn một bộ dữ liệu cho các bộ sưu tập nhỏ các phần dữ liệu hoàn toàn khác nhau trong đó một lớp toàn diện sẽ quá nặng và danh sách cho các bộ sưu tập có kích thước hợp lý khi bạn có một bộ dữ liệu thuần nhất.

19

Danh sách [1,2,3] là động và linh hoạt nhưng tính linh hoạt đó đi kèm với chi phí tốc độ.

Tuple (1,2,3) là cố định (không thay đổi) và do đó nhanh hơn.

+1

hoạt động nào nhanh hơn? lập chỉ mục? – rafak

10

Tuples là cách nhanh chóng linh hoạt để tạo tổng hợp loại dữ liệu. Danh sách là các thùng chứa, danh sách các đối tượng.

Ví dụ: bạn sẽ sử dụng Danh sách để lưu trữ danh sách chi tiết sinh viên trong một lớp học.

Mỗi chi tiết của sinh viên trong danh sách đó có thể là 3-tuple chứa số cuộn, tên và điểm kiểm tra của họ.

`[(1,'Mark',86),(2,'John',34)...]` 

Ngoài ra, vì bộ dữ liệu không thay đổi, chúng có thể được sử dụng làm khóa trong từ điển.

+0

Với báo trước tinh tế rằng một bộ dữ liệu chỉ chứa các bất biến khác được coi là có thể băm, ví dụ: '([], 3)' không thể băm; '(" hi ", 3)' là băm; '(([], 3), 3)' không được băm; '(((), 3), 3)' là băm. – Jegschemesch

1

Như những người khác đã đề cập, Danh sách và bộ là cả hai vùng chứa có thể được sử dụng để lưu trữ các đối tượng python. Danh sách có thể mở rộng và nội dung của chúng có thể thay đổi bằng cách gán, mặt khác các bộ dữ liệu là không thay đổi.

Ngoài ra, danh sách không thể được sử dụng làm khóa trong từ điển trong khi các bộ dữ liệu có thể.

1

Nếu bạn có thể tìm thấy giải pháp hoạt động với bộ dữ liệu, hãy sử dụng chúng, vì nó buộc bất biến có thể dẫn bạn đến một con đường chức năng hơn. Bạn gần như không bao giờ hối tiếc đi xuống con đường chức năng/bất biến.

3

Bất cứ khi nào tôi cần chuyển một tập hợp các mục vào một hàm, nếu tôi muốn hàm không thay đổi các giá trị được chuyển vào - Tôi sử dụng bộ dữ liệu.

Khác nếu tôi muốn có chức năng thay đổi các giá trị, tôi sử dụng danh sách.

Luôn luôn nếu bạn đang sử dụng thư viện bên ngoài và cần chuyển danh sách giá trị vào hàm và không chắc chắn về tính toàn vẹn của dữ liệu, hãy sử dụng bộ tuple.

7

Khái niệm tuples là có ý:

  • thực dụng, họ là tuyệt vời cho đóng gói và giá trị giải nén (x,y=coord).

  • Kết hợp với từ điển (bảng băm), chúng cho phép các hình thức ánh xạ sẽ đòi hỏi nhiều cấp độ liên kết. Ví dụ, hãy xem xét đánh dấu (x, y) đã được tìm thấy.

    // PHP 
    if (!isset($found[$x])) { 
        $found[$x] = Array(); 
        $found[$x][$y] = true; 
    } else if (!isset($found[$x][$y])) { 
        $found[$x][$y] = true; 
    } 
    
    # Python 
    found[(x,y)] = True # parens added for clarity 
    
  • Danh sách nên được sử dụng với kỳ vọng về các thao tác trên nội dung của nó (do đó các đề cập khác nhau về tính bất biến). Người ta sẽ muốn bật, đẩy, ghép, cắt, tìm kiếm, chèn trước, chèn sau, vv với một danh sách.

  • Tuples phải là đại diện cấp thấp của đối tượng, nơi so sánh đơn giản được thực hiện hoặc các thao tác như trích xuất phần tử n'th hoặc n theo kiểu có thể dự đoán được, chẳng hạn như ví dụ tọa độ đã cho trước đó.

  • Cuối cùng, danh sách không thể băm, do đó loại ánh xạ được thực hiện với từ điển (bảng băm trong Perl, mảng kết hợp trong PHP) phải được thực hiện với bộ dữ liệu.

    Dưới đây là một ví dụ đơn giản của các bộ và từ điển, cùng Cuối cùng:

    """ 
    couple is a tuple of two people 
    doesLike is a dictionary mapping couples to True or False 
    """ 
    couple = "john", "jane" 
    doesLike = dict() 
    doesLike[couple] = True 
    doesLike["jane", "john"] = False # unrequited love :'(
    
2

[1, 2, 3] là một danh sách trong đó người ta có thể thêm hoặc xóa các mục.
(1, 2, 3) là một bộ trong đó một khi được xác định, không thể sửa đổi được.

1

[1,2,3] là danh sách.

(1,2,3) là bộ dữ liệu và không thay đổi.

2

mở bảng điều khiển và chạy python. Hãy thử điều này:

>>> list = [1, 2, 3]  
    >>> dir(list) 
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli 
    ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit 
    em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', 
    '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r 
    educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__' 
    , '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 
'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 

Như bạn có thể thấy người cuối cùng trong danh sách dòng cuối cùng có các phương pháp sau: 'append', 'đếm', 'mở rộng', 'index', 'chèn', ' pop', 'loại bỏ', 'đảo ngược', 'sắp xếp'

Bây giờ thử tương tự cho tuple:

>>> tuple = (1, 2, 3) 
>>> dir(tuple) 
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ 
    format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get 
    slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__ 
    lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__' 
    , '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] 

Chỉ 'đếm' và 'index' từ phương pháp danh sách xuất hiện ở đây.

Điều này là do bộ dữ liệu không thay đổi được và chúng không hỗ trợ bất kỳ sửa đổi nào. Thay vào đó chúng đơn giản và nhanh hơn trong việc triển khai nội bộ.

0

(1,2,3) là một bộ trong khi [1,2,3] là một danh sách. Một tuple là một đối tượng bất biến trong khi danh sách có thể thay đổi.

0

(1,2,3) là một bộ và [1,2,3] là một danh sách. Bạn hoặc là một trong hai đại diện cho chuỗi các số nhưng lưu ý rằng bộ dữ liệu là không thay đổi và danh sách là các đối tượng Python có thể thay đổi.

0
  • Một tuple có thể đại diện cho một chìa khóa trong từ điển, bởi vì nó không thay đổi.
  • Sử dụng danh sách nếu bạn có một bộ sưu tập dữ liệu không cần quyền truy cập ngẫu nhiên.
Các vấn đề liên quan