2013-06-20 38 views
7

Tôi đang gặp sự cố trong chương trình của mình và tôi không chắc mình đang làm gì sai. Để bắt đầu, tôi đã tạo danh sách các danh sách trống. Ví dụ:python gắn giá trị vào danh sách con

>>> Lists = [[]]*12 

mang đến cho:

>>> Lists 
[[], [], [], [], [], [], [], [], [], [], [], []] 

Tuy nhiên, khi cố gắng thêm một giá trị cho một sublist cá nhân nó bổ sung thêm giá trị cho tất cả các danh sách con. Ví dụ:

>>> Lists[2].append(1) 

Cung cấp:

>>> Lists 
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1], [1]] 

Có cách nào để phụ thêm vào chỉ là một danh sách phụ chứa duy nhất để kết quả sẽ trông giống như:

>>> Lists 
    [[], [], [1], [], [], [], [], [], [], [], [], []] 
+0

Bạn có thể muốn nhìn vào [này] (http://www.laurentluce.com/posts/python-list-implementation/) để hiểu tại sao nó lại gắn cho tất cả các danh sách con . Nếu bạn nhìn vào hình thứ hai, bạn có thể nghĩ đến 12 phần tử trong danh sách của bạn khi trỏ đến cùng một đối tượng '[]'. Bây giờ khi bạn chắp thêm '1' vào' Lists [2] ', nó sẽ gắn thêm vào đối tượng danh sách chia sẻ. Do đó, tất cả các phần tử trong 'Lists' xuất hiện để có thêm' 1'. – Nik

Trả lời

18

Danh sách đối tượng là có thể thay đổi, vì vậy, bạn đang thực sự tạo danh sách có 12 tham chiếu đến một danh sách. Sử dụng một danh sách hiểu biết và thực hiện 12 danh mục khác nhau:

Lists = [[] for i in range(12)] 

Xin lỗi, tôi không thể tìm thấy bản sao gốc của câu hỏi này chính xác

1

Tôi chạy vào vấn đề này cùng trong khi cố gắng để giải quyết một vấn đề sắp xếp topo.

thử điều này:

Lists[2] = Lists[2]+[1] 
Các vấn đề liên quan