Làm phẳng danh sách thành "xóa dấu ngoặc vuông" bằng cách sử dụng tính năng hiểu danh sách lồng nhau. Thao tác này sẽ hủy lưu trữ từng danh sách được lưu trữ trong danh sách danh sách của bạn!
list_of_lists = [[180.0], [173.8], [164.2], [156.5], [147.2], [138.2]]
flattened = [val for sublist in list_of_lists for val in sublist]
comprehensions danh sách lồng nhau đánh giá theo cách tương tự mà họ unwrap (tức là thêm xuống dòng và tab cho mỗi vòng lặp mới Vì vậy, trong trường hợp này:.
flattened = [val for sublist in list_of_lists for val in sublist]
tương đương với:
flattened = []
for sublist in list_of_lists:
for val in sublist:
flattened.append(val)
Sự khác biệt lớn là danh sách comp đánh giá MUCH nhanh hơn vòng lặp chưa được làm sáng và loại bỏ các cuộc gọi nối thêm!
Nếu bạn có nhiều mục trong danh sách con, danh sách comp sẽ làm phẳng nó. tức là
>>> list_of_lists = [[180.0, 1, 2, 3], [173.8], [164.2], [156.5], [147.2], [138.2]]
>>> flattened = [val for sublist in list_of_lists for val in sublist]
>>> flattened
[180.0, 1, 2, 3, 173.8, 164.2, 156.5, 147.2,138.2]
Nói cách khác, bạn có một danh sách liệt kê và bạn muốn để có thể để làm việc trên tất cả các thành viên của danh sách bên trong? Ngoài ra, vì tất cả các danh sách bên trong đều có một giá trị, có đáng để đảm bảo rằng chỉ có giá trị được chèn vào danh sách ngoài không?Hoặc có thể một số danh sách có nhiều phần tử không? Điều quan trọng là cung cấp cho tất cả các thông tin có thể bạn có thể, càng chính xác càng tốt. –
Để giúp mọi người trả lời câu hỏi của bạn trong tương lai, hãy cố gắng tránh các câu nói chung như "dấu ngoặc vuông sẽ không cho phép tôi" và thay vào đó đưa ra ví dụ cụ thể về thứ bạn đã cố gắng không làm việc và sao chép và dán một mã thử nghiệm nhỏ cho thấy lỗi kết quả. – DSM
liên quan [flatten lồng nhau danh sách] (http://stackoverflow.com/q/952914/4279) – jfs