câu trả lời hiện đang được chấp nhận của varunl
>>> l = [None] * 10
>>> l
[None, None, None, None, None, None, None, None, None, None]
Hoạt động tốt cho các loại không tham chiếu như số. Thật không may nếu bạn muốn tạo một danh sách các danh sách, bạn sẽ gặp phải các lỗi tham chiếu. Ví dụ trong Python 2.7.6:
>>> a = [[]]*10
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
>>>
Như bạn có thể thấy, mỗi phần tử đang trỏ đến cùng một đối tượng danh sách. Để giải quyết vấn đề này, bạn có thể tạo một phương thức sẽ khởi tạo mỗi vị trí thành một tham chiếu đối tượng khác nhau.
def init_list_of_objects(size):
list_of_objects = list()
for i in range(0,size):
list_of_objects.append( list() ) #different object reference each time
return list_of_objects
>>> a = init_list_of_objects(10)
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [], [], [], [], [], [], [], [], []]
>>>
Có khả năng là một cách python mặc định, tích hợp sẵn để thực hiện việc này (thay vì viết một hàm), nhưng tôi không chắc nó là gì. Sẽ rất vui khi được sửa chữa!
Chỉnh sửa: Đó là [ [] for _ in range(10)]
Thí dụ :
>>> [ [random.random() for _ in range(2) ] for _ in range(5)]
>>> [[0.7528051908943816, 0.4325669600055032], [0.510983236521753, 0.7789949902294716], [0.09475179523690558, 0.30216475640534635], [0.3996890132468158, 0.6374322093017013], [0.3374204010027543, 0.4514925173253973]]