Có thể không có vòng lặp khởi tạo tất cả các giá trị danh sách cho một số bool không? Ví dụ tôi muốn có một danh sách các phần tử N tất cả là False.Khởi tạo danh sách với cùng giá trị bool
27
A
Trả lời
75
Bạn có thể làm điều đó như thế này: -
>>> [False] * 10
[False, False, False, False, False, False, False, False, False, False]
LƯU Ý: - Lưu ý rằng, bạn không bao giờ nên làm điều này với một list
của mutable types
với cùng một giá trị, nếu không bạn sẽ nhìn thấy hành vi đáng ngạc nhiên như một ví dụ bên dưới: -
>>> my_list = [[10]] * 3
>>> my_list
[[10], [10], [10]]
>>> my_list[0][0] = 5
>>> my_list
[[5], [5], [5]]
Như bạn có thể thấy, những thay đổi bạn đã thực hiện trong một danh sách bên trong, được phản ánh trong tất cả chúng.
9
my_list = [False for i in range(n)]
Điều này sẽ cho phép bạn thay đổi các yếu tố riêng lẻ vì nó xây dựng từng phần tử một cách độc lập.
Mặc dù, kỹ thuật này là một vòng lặp.
3
Khi không gian quan trọng, bytearray
là lựa chọn tốt hơn. Đó là khoảng năm lần không gian hiệu quả hơn so với danh sách các giải pháp boolean.
Điều này tạo ra một loạt các N
giá trị, khởi tạo zero:
B = bytearray(N)
này là hoàn toàn thành ngữ chính xác cho vấn đề này. Tuy nhiên, nó hoàn toàn là thành ngữ không chính xác để sử dụng khi bạn đang xử lý một loại có thể thay đổi: '[[]] * 10' có một số hậu quả đáng ngạc nhiên cho những người mới :). – mgilson