2009-06-11 51 views
195

Làm cách nào để khởi tạo danh sách với giá trị mặc định bằng Python gấp 10 lần?Khởi tạo danh sách với độ dài cụ thể bằng Python

Tôi đang tìm kiếm một cách đẹp để khởi tạo danh sách trống với một phạm vi cụ thể. Vì vậy, hãy tạo một danh sách có 10 số không hoặc một cái gì đó để chắc chắn rằng danh sách của tôi có độ dài cụ thể.

Trả lời

299

Nếu "giá trị mặc định" bạn muốn là không thay đổi, đề xuất của @ eduffy, ví dụ: [0]*10, là đủ tốt.

Nhưng nếu bạn muốn, chẳng hạn, một danh sách mười dict s, làm không sử dụng [{}]*10 - rằng sẽ cung cấp cho bạn một danh sách với cùng ban đầu rỗng dict mười lần, không mười những khác biệt . Thay vào đó, hãy sử dụng các cấu trúc [{} for i in range(10)] hoặc tương tự, để tạo mười riêng biệt dict giây để tạo danh sách của bạn.

+26

hoặc [{} cho _ trong phạm vi (10)] để tránh cảnh báo lint –

+4

giống như [0] * 10 không phải là cách tạo danh sách 2d. Nếu bạn tạo một danh sách 'l = [[0] * 10] * 10]', hãy thử thay đổi 'l [0] [0] = 100', bạn sẽ thấy rằng l [1] [0], l [2] [0] ... l [9] [0] đều được đặt thành 100. Đó là vì '*' sao chép tham chiếu cho đối tượng. –

+0

Chỉ cần nhấn một. Vết thương với [['' cho i trong phạm vi (5)] cho j trong phạm vi (5)] thay vì >>> card_strings = [[''] * 5] * 5 >>> card_strings [0] [0 ] = "Điều đó thật bất ngờ ..." – RobotHumans

134

liệt kê các phép nhân.

>>> [0] * 10 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
39

Trong một cuộc nói chuyện về nội dung lõi container trong Python tại PyCon 2012, Raymond Hettinger đang đề xuất sử dụng [None] * n để phân bổ trước độ dài bạn muốn.

Slides available as PPT hoặc via Google

Các trượt toàn bộ boong là khá thú vị. presentation is available on YouTube nhưng không thêm nhiều vào trang trình bày.

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