Xóa các bản sao khỏi tín dụng chuỗi. Tim Peters Vấn đề Bạn có một chuỗi có thể bao gồm các bản sao và bạn cần loại bỏ các bản sao đó theo cách nhanh nhất có thể mà không cần … - Lựa chọn từ Python Cookbook [Sách]
Có một yếu tố gây nhầm lẫn liên quan đến thuật ngữ “danh sách của danh sách” trong Python. Tôi đã viết hướng dẫn toàn diện nhất này về danh sách các danh sách trên thế giới để loại bỏ tất cả những nhầm lẫn đó của người mới bắt đầu trong ngôn ngữ lập trình Python
Hướng dẫn đa phương thức này bao gồm
- Mã nguồn để sao chép dán trong các dự án của riêng bạn
- Mã tương tác bạn có thể thực thi trong trình duyệt của mình
- Văn bản giải thích cho mỗi đoạn mã
- Các video chụp màn hình tôi đã ghi lại để giúp bạn hiểu các khái niệm nhanh hơn
- Đồ họa và các khái niệm minh họa để giúp bạn có được những ý tưởng một cách nhanh chóng
- Tài liệu tham khảo để đọc thêm và hướng dẫn liên quan
Vì vậy, nếu bạn bối rối trước các danh sách, hãy đọc tiếp—và giải quyết sự nhầm lẫn của bạn một lần và mãi mãi
Danh sách các danh sách là gì?
Sự định nghĩa. Danh sách các danh sách trong Python là một đối tượng danh sách trong đó mỗi phần tử danh sách là một danh sách. Tạo danh sách danh sách trong Python bằng cách sử dụng ký hiệu dấu ngoặc vuông để tạo danh sách lồng nhau
[[1, 2, 3], [4, 5], [6, 7, 8]]1
Bạn có muốn phát triển các kỹ năng của một chuyên gia Python toàn diện—đồng thời được trả tiền trong quá trình này không?
Phân tích bộ nhớ
Điều quan trọng là bạn phải hiểu rằng danh sách chỉ là một chuỗi tham chiếu đến các vị trí bộ nhớ
Bằng cách chơi với trình hiển thị mã, bạn sẽ hiểu sâu hơn về cách Python hoạt động ở cốt lõi của nó
Chỉ cần nhấp vào nút “Tiếp theo” để xem từng dòng mã mở ra như thế nào
Tạo một danh sách các danh sách trong Python
Tạo một danh sách các danh sách bằng cách sử dụng ký hiệu dấu ngoặc vuông
Ví dụ: để tạo danh sách danh sách các giá trị số nguyên, hãy sử dụng
[[1, 2, 3], [4, 5], [6, 7, 8]]2. Mỗi phần tử danh sách của danh sách bên ngoài là một danh sách lồng nhau
lst = [[1, 2], [3, 4]]
Có nhiều cách lập trình và nâng cao hơn để tạo và khởi tạo danh sách các danh sách trong Python—vui lòng đọc hướng dẫn chi tiết của chúng tôi trên blog Finxter
🌍 Hướng dẫn liên quan. Tạo và khởi tạo danh sách danh sách trong Python
Chuyển đổi danh sách danh sách thành một danh sách
Giả sử, bạn muốn chuyển đổi một danh sách gồm các danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]2 thành một danh sách duy nhất
[[1, 2, 3], [4, 5], [6, 7, 8]]4. Làm thế nào để đạt được điều này?
- Hiểu danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]
5 giả sử bạn có một danh sách các danh sách[[1, 2, 3], [4, 5], [6, 7, 8]]
6 - Giải nén
[[1, 2, 3], [4, 5], [6, 7, 8]]
7 giả sử bạn có một danh sách gồm hai danh sách[[1, 2, 3], [4, 5], [6, 7, 8]]
6 - Sử dụng phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]
9 của danh sách Python để mở rộng tất cả danh sách trong danh sách danh sách
Tìm ví dụ về cả ba phương thức trong đoạn mã sau
[[1, 2, 3], [4, 5], [6, 7, 8]]0
Do tính đơn giản và hiệu quả của nó, phương pháp đọc danh sách đầu tiên vượt trội so với hai phương pháp còn lại
Chuyển đổi Danh sách Danh sách sang Từ điển
Đối với một số ứng dụng, việc chuyển đổi danh sách danh sách thành từ điển khá hữu ích
- cơ sở dữ liệu. Danh sách của danh sách là bảng trong đó các danh sách bên trong là các hàng của cơ sở dữ liệu và bạn muốn gán mỗi hàng cho một khóa chính trong từ điển mới
- bảng tính. Danh sách danh sách là dữ liệu bảng tính hai chiều và bạn muốn gán mỗi hàng cho một khóa [=tên hàng]
- Phân tích dữ liệu. Bạn có một ma trận hai chiều [=mảng NumPy] ban đầu được biểu diễn dưới dạng danh sách danh sách và bạn muốn lấy từ điển để dễ dàng truy cập dữ liệu
Có ba cách chính để chuyển đổi danh sách danh sách thành từ điển trong Python [ nguồn ]
- Từ điển hiểu
- biểu thức trình tạo
- cho vòng lặp
Hãy đi sâu vào từng vấn đề đó
1. Từ điển hiểu
Vấn đề. Giả sử bạn có một danh sách các danh sách trong đó mỗi danh sách đại diện cho một người và bao gồm ba giá trị cho tên, tuổi và màu tóc của người đó
Để thuận tiện, bạn muốn tạo một từ điển trong đó bạn sử dụng tên của một người làm khóa từ điển và danh sách phụ bao gồm độ tuổi và màu tóc làm giá trị từ điển
Dung dịch. Bạn có thể đạt được điều này bằng cách sử dụng tính năng hiểu từ điển đẹp mắt [nhưng đáng ngạc nhiên là ít được biết đến] trong Python
[[1, 2, 3], [4, 5], [6, 7, 8]]1
Giải trình. Tuyên bố hiểu từ điển bao gồm biểu thức
[[1, 2, 3], [4, 5], [6, 7, 8]]20 gán tên của một người
[[1, 2, 3], [4, 5], [6, 7, 8]]21 vào danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]22 về tuổi và màu tóc của người đó
Hơn nữa, nó bao gồm ngữ cảnh
[[1, 2, 3], [4, 5], [6, 7, 8]]23 lặp lại trên tất cả “các hàng dữ liệu”
2. biểu thức trình tạo
Một cách tương tự để đạt được điều tương tự là sử dụng biểu thức trình tạo kết hợp với hàm tạo
[[1, 2, 3], [4, 5], [6, 7, 8]]24 để tạo từ điển
[[1, 2, 3], [4, 5], [6, 7, 8]]7
Đoạn mã này gần giống với đoạn mã được sử dụng trong phần “hiểu danh sách”. Sự khác biệt duy nhất là bạn sử dụng bộ dữ liệu chứ không phải ánh xạ trực tiếp để điền vào từ điển
3. cho vòng lặp
Tất nhiên, không cần phải cầu kỳ ở đây
Bạn cũng có thể sử dụng vòng lặp for thông thường và xác định từng phần tử từ điển trong một vòng lặp for đơn giản
Đây là mã thay thế
[[1, 2, 3], [4, 5], [6, 7, 8]]8
Một lần nữa, bạn ánh xạ tên của từng người vào danh sách bao gồm tuổi và màu tóc của họ
Chuyển đổi danh sách danh sách thành mảng NumPy
Làm cách nào để chuyển đổi danh sách danh sách thành mảng NumPy?
Xem video này trên YouTube
Vấn đề. Đưa ra một danh sách các danh sách trong Python. Làm cách nào để chuyển đổi nó thành mảng 2D NumPy?
Thí dụ. Chuyển đổi danh sách sau thành danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]9
vào một mảng NumPy
lst = [[1, 2], [3, 4]]0
Dung dịch. Sử dụng hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]25 để chuyển đổi danh sách các danh sách thành mảng NumPy hai chiều
Đây là mã
lst = [[1, 2], [3, 4]]2
Cách chuyển đổi danh sách danh sách thành mảng NumPy với số lượng phần tử khác nhau
Vấn đề. Đưa ra một danh sách các danh sách. Các danh sách bên trong có số lượng phần tử khác nhau. Làm cách nào để chuyển đổi chúng thành một mảng NumPy?
Thí dụ. Giả sử, bạn đã có danh sách các danh sách sau
[[1, 2, 3], [4, 5], [6, 7, 8]]
Các cách tiếp cận khác nhau để chuyển đổi danh sách danh sách này thành một mảng NumPy là gì?
Dung dịch. Có ba chiến lược khác nhau mà bạn có thể sử dụng. [nguồn]
[1] Sử dụng hàm [[1, 2, 3], [4, 5], [6, 7, 8]]
26 tiêu chuẩn
[[1, 2, 3], [4, 5], [6, 7, 8]]2
Thao tác này tạo ra một mảng NumPy có ba phần tử—mỗi phần tử là một kiểu danh sách. Bạn có thể kiểm tra loại đầu ra bằng cách sử dụng hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]27 tích hợp
[[1, 2, 3], [4, 5], [6, 7, 8]]00
[2] Tạo một mảng các mảng
[[1, 2, 3], [4, 5], [6, 7, 8]]01
Điều này hợp lý hơn phiên bản trước vì nó tạo ra một mảng NumPy gồm các mảng NumPy 1D [chứ không phải danh sách Python 1D]
[3] Làm cho các danh sách có độ dài bằng nhau
[[1, 2, 3], [4, 5], [6, 7, 8]]02
Bạn sử dụng khả năng hiểu danh sách để “đệm” giá trị
[[1, 2, 3], [4, 5], [6, 7, 8]]28 cho từng danh sách bên trong có độ dài nhỏ hơn độ dài tối đa
Đọc thêm. Xem bài viết gốc trên blog này để biết phiên bản chi tiết hơn của nội dung này
Chuyển đổi Danh sách Danh sách sang Dataframe
Cách chuyển đổi danh sách danh sách thành khung dữ liệu Pandas
Xem video này trên YouTube
Vấn đề. Bạn được cung cấp một danh sách các danh sách. Mục tiêu của bạn là chuyển đổi nó thành Pandas Dataframe
Thí dụ. Giả sử, bạn muốn so sánh dữ liệu lương của các công ty khác nhau và mô tả công việc
Bạn đã thu được tập dữ liệu lương sau dưới dạng danh sách danh sách lồng nhau
[[1, 2, 3], [4, 5], [6, 7, 8]]03
Làm cách nào bạn có thể chuyển đổi cái này thành Khung dữ liệu Pandas?
Dung dịch. Giải pháp đơn giản là sử dụng hàm tạo
[[1, 2, 3], [4, 5], [6, 7, 8]]29 để tạo đối tượng Dataframe mới từ các loại đầu vào khác nhau, chẳng hạn như mảng hoặc danh sách NumPy
Đây là cách thực hiện cho ví dụ đã cho
[[1, 2, 3], [4, 5], [6, 7, 8]]04
Điều này dẫn đến Dataframe sau
[[1, 2, 3], [4, 5], [6, 7, 8]]05
Một cách khác là phương pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]000 tạo ra cùng một đầu ra
[[1, 2, 3], [4, 5], [6, 7, 8]]06
Nếu bạn muốn thêm tên cột để làm cho đầu ra đẹp hơn, bạn cũng có thể chuyển các tên đó dưới dạng đối số riêng
[[1, 2, 3], [4, 5], [6, 7, 8]]07
Nếu danh sách đầu tiên của danh sách chứa tên cột, hãy sử dụng cắt để tách danh sách đầu tiên khỏi các danh sách khác
[[1, 2, 3], [4, 5], [6, 7, 8]]08
Cắt lát là một tính năng mạnh mẽ của Python và trước khi bạn có thể thành thạo Pandas, bạn cần thành thạo cắt lát
Hướng dẫn liên quan
- Để làm mới kỹ năng cắt lát Python của bạn, hãy tải xuống miễn phí sách điện tử “Coffee Break Python Slicing” của tôi
Bản tóm tắt. Để chuyển đổi danh sách các danh sách thành Khung dữ liệu Pandas, hãy sử dụng hàm tạo
[[1, 2, 3], [4, 5], [6, 7, 8]]001 và chuyển danh sách các danh sách làm đối số. Đối số cột tùy chọn có thể giúp bạn cấu trúc đầu ra
bài viết liên quan
- Làm cách nào để chuyển đổi danh sách các danh sách thành Khung dữ liệu Python?
Chuyển đổi danh sách danh sách thành danh sách bộ dữ liệu
Nếu bạn đang vội, đây là câu trả lời ngắn gọn
Sử dụng câu lệnh hiểu danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]002 để chuyển đổi từng phần tử trong
[[1, 2, 3], [4, 5], [6, 7, 8]]003 của bạn thành một bộ. Điều này cũng hoạt động đối với danh sách các danh sách có số lượng phần tử khác nhau
Làm cách nào để chuyển đổi danh sách danh sách thành danh sách bộ dữ liệu trong Python?
Xem video này trên YouTube
Nhưng còn nhiều điều hơn thế nữa và việc nghiên cứu hai phương pháp chính để đạt được cùng một mục tiêu sẽ giúp bạn trở thành một lập trình viên giỏi hơn. Vì vậy hãy tiếp tục đọc
Phương pháp 1. Danh sách hiểu + tuple[]
Vấn đề. Làm cách nào để chuyển đổi danh sách danh sách thành danh sách bộ dữ liệu?
Thí dụ. Bạn có một danh sách các danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]004 và bạn muốn chuyển đổi nó thành một danh sách các bộ dữ liệu
[[1, 2, 3], [4, 5], [6, 7, 8]]005
Dung dịch. Có nhiều giải pháp khác nhau để chuyển đổi danh sách danh sách thành danh sách bộ dữ liệu. Sử dụng khả năng hiểu danh sách ở dạng cơ bản nhất
[[1, 2, 3], [4, 5], [6, 7, 8]]09
Cách làm này đơn giản và hiệu quả
Khả năng hiểu danh sách xác định cách chuyển đổi từng giá trị [
[[1, 2, 3], [4, 5], [6, 7, 8]]006 trong ví dụ] thành một phần tử danh sách mới. Vì mỗi phần tử danh sách là một bộ dữ liệu mới, bạn sử dụng hàm tạo
[[1, 2, 3], [4, 5], [6, 7, 8]]007 để tạo bộ dữ liệu mới từ danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]006
Nếu bạn có ba phần tử danh sách cho mỗi danh sách phụ, bạn có thể sử dụng phương pháp tương tự với chuyển đổi
[[1, 2, 3], [4, 5], [6, 7, 8]]10
Bạn có thể xem quy trình thực thi trong hình ảnh tương tác sau [chỉ cần nhấp vào nút “Tiếp theo” để xem điều gì đang xảy ra trong mã]
Và nếu bạn có số lượng phần tử danh sách khác nhau cho mỗi danh sách con, phương pháp này vẫn hoạt động tốt
[[1, 2, 3], [4, 5], [6, 7, 8]]11
Bạn thấy rằng cách tiếp cận với khả năng hiểu danh sách là cách tốt nhất để chuyển đổi danh sách các danh sách thành danh sách các bộ. Nhưng có bất kỳ lựa chọn thay thế?
Phương pháp 2. Chức năng bản đồ + tuple[]
Một cách khác là sử dụng chức năng bản đồ áp dụng một chức năng được chỉ định trên từng phần tử của một lần lặp
💡 Guido van Rossum, người tạo ra Python, không thích hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]009 vì nó khó đọc hơn [và kém hiệu quả hơn] so với phiên bản hiểu danh sách. Vui lòng đọc một cuộc thảo luận chi tiết về cách anh ấy lập luận chính xác trong bài viết trên blog của tôi
Vì vậy, không cần phải quảng cáo thêm, đây là cách bạn có thể chuyển đổi danh sách các danh sách thành danh sách các bộ dữ liệu bằng cách sử dụng hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]009
[[1, 2, 3], [4, 5], [6, 7, 8]]12
Đối số đầu tiên của hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]009 là tên hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]012
Hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]013 này chuyển đổi từng phần tử trên
[[1, 2, 3], [4, 5], [6, 7, 8]]6 có thể lặp đã cho [đối số thứ hai] thành một bộ
Kết quả của hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]009 là một hàm có thể lặp lại, vì vậy bạn cần chuyển đổi nó thành một danh sách trước khi in nó ra trình bao vì biểu diễn chuỗi mặc định của một hàm có thể lặp lại không thể đọc được bằng con người
Những bài viết liên quan
- Cách chuyển đổi danh sách danh sách thành danh sách bộ dữ liệu
- Cách chuyển đổi danh sách các bộ dữ liệu thành danh sách danh sách
- Cách chuyển đổi danh sách danh sách thành khung dữ liệu Pandas
- Cách chuyển đổi danh sách danh sách thành mảng NumPy
- Cách chuyển đổi danh sách danh sách thành từ điển trong Python
Chuyển đổi Danh sách Danh sách sang Tệp CSV
Cách chuyển đổi danh sách danh sách thành tệp CSV bằng Python
Xem video này trên YouTube
Vấn đề. Làm cách nào để chuyển đổi danh sách các danh sách thành tệp
[[1, 2, 3], [4, 5], [6, 7, 8]]016?
Thí dụ. Given là một danh sách các danh sách—ví dụ: dữ liệu lương của nhân viên trong một công ty nhất định
[[1, 2, 3], [4, 5], [6, 7, 8]]13
Mục tiêu của bạn là viết nội dung của danh sách các danh sách thành định dạng tệp giá trị được phân tách bằng dấu phẩy [CSV]
Outfile của bạn sẽ trông như thế này
[[1, 2, 3], [4, 5], [6, 7, 8]]14
Dung dịch. Có bốn cách đơn giản để chuyển đổi danh sách danh sách thành tệp CSV trong Python
- CSV. Nhập mô-đun
[[1, 2, 3], [4, 5], [6, 7, 8]]
016 bằng Python, tạo một đối tượng người viết csv và ghi danh sách các danh sách vào tệp bằng cách sử dụng phương thức[[1, 2, 3], [4, 5], [6, 7, 8]]
018 trên đối tượng người viết - gấu trúc. Nhập thư viện gấu trúc, tạo Khung dữ liệu Pandas và ghi Khung dữ liệu vào một tệp bằng phương pháp Khung dữ liệu
[[1, 2, 3], [4, 5], [6, 7, 8]]
019 - NumPy. Nhập thư viện NumPy, tạo mảng NumPy và ghi đầu ra vào tệp CSV bằng phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]
020 - con trăn. Sử dụng triển khai Python thuần túy không yêu cầu bất kỳ thư viện nào bằng cách sử dụng chức năng I/O của tệp Python
Sở thích của tôi là phương pháp 2 [Pandas] vì nó đơn giản nhất để sử dụng và mạnh mẽ nhất cho các loại đầu vào khác nhau [số hoặc văn bản]
Phương pháp 1. Mô-đun CSV Python
Bạn có thể dễ dàng chuyển đổi danh sách các danh sách thành tệp CSV bằng Python—bằng cách sử dụng thư viện
[[1, 2, 3], [4, 5], [6, 7, 8]]016
Đây là tùy biến nhất trong cả bốn phương pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]15
đầu ra
[[1, 2, 3], [4, 5], [6, 7, 8]]14
Trong mã, trước tiên bạn mở tệp bằng lệnh
[[1, 2, 3], [4, 5], [6, 7, 8]]022 tiêu chuẩn của Python. Bây giờ, bạn có thể ghi nội dung vào đối tượng tệp
[[1, 2, 3], [4, 5], [6, 7, 8]]023
Tiếp theo, bạn chuyển đối tượng tệp này tới hàm tạo của trình ghi CSV thực hiện một số phương thức trợ giúp bổ sung—và bao bọc đối tượng tệp một cách hiệu quả, cung cấp cho bạn chức năng mới dành riêng cho CSV, chẳng hạn như phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]018
Bây giờ, bạn chuyển một danh sách các danh sách sang phương pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]018 của trình soạn thảo CSV đảm nhiệm việc chuyển đổi danh sách các danh sách sang định dạng CSV
Bạn có thể tùy chỉnh trình ghi CSV trong hàm tạo của nó [e. g. , bằng cách sửa đổi dấu phân cách từ dấu phẩy
[[1, 2, 3], [4, 5], [6, 7, 8]]026 thành ký tự khoảng trắng
[[1, 2, 3], [4, 5], [6, 7, 8]]027]
Hãy xem thông số kỹ thuật để tìm hiểu về các sửa đổi nâng cao
Phương pháp 2. Pandas DataFrame to_csv[]
Bạn có thể chuyển đổi danh sách các danh sách thành Khung dữ liệu Pandas cung cấp cho bạn các khả năng mạnh mẽ, chẳng hạn như phương pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]028
Đây là phương pháp đơn giản nhất và nó cho phép bạn tránh nhập thêm một thư viện khác [dù sao thì tôi cũng sử dụng Pandas trong nhiều dự án Python]
[[1, 2, 3], [4, 5], [6, 7, 8]]17
đầu ra
[[1, 2, 3], [4, 5], [6, 7, 8]]18
Bạn tạo một Khung dữ liệu Pandas—là biểu diễn dữ liệu dạng bảng mặc định của Python. Hãy coi nó như một bảng tính Excel trong mã của bạn [có hàng và cột]
DataFrame là một cấu trúc dữ liệu rất mạnh cho phép bạn thực hiện các phương thức khác nhau. Một trong số đó là phương pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]028 cho phép bạn ghi nội dung của nó vào tệp CSV
Bạn đặt các đối số
[[1, 2, 3], [4, 5], [6, 7, 8]]030 và
[[1, 2, 3], [4, 5], [6, 7, 8]]031 của phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]028 thành
[[1, 2, 3], [4, 5], [6, 7, 8]]033 vì Pandas, theo mặc định, thêm các chỉ số hàng và cột số nguyên 0, 1, 2, …
Một lần nữa, hãy nghĩ về chúng như các chỉ số hàng và cột trong bảng tính Excel của bạn. Bạn không muốn chúng xuất hiện trong tệp CSV nên bạn đặt đối số thành
[[1, 2, 3], [4, 5], [6, 7, 8]]033
Nếu bạn muốn tùy chỉnh đầu ra CSV, bạn có rất nhiều đối số đặc biệt để sử dụng. Kiểm tra bài viết này để biết danh sách đầy đủ tất cả các đối số
bài viết liên quan. Pandas Cheat Sheet để ghim vào tường của bạn
Phương pháp 3. NumPy savetxt[]
NumPy là cốt lõi của chức năng học máy và khoa học dữ liệu của Python. Ngay cả Pandas cũng sử dụng mảng NumPy để triển khai chức năng quan trọng
Bạn có thể chuyển đổi danh sách các danh sách thành tệp CSV bằng cách sử dụng hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]035 của NumPy và chuyển mảng NumPy làm đối số phát sinh từ việc chuyển đổi danh sách các danh sách
Phương pháp này là tốt nhất nếu bạn chỉ có dữ liệu số—nếu không, nó sẽ dẫn đến chuyển đổi loại dữ liệu phức tạp không được khuyến nghị
[[1, 2, 3], [4, 5], [6, 7, 8]]19
đầu ra
[[1, 2, 3], [4, 5], [6, 7, 8]]70
Đầu ra trông không đẹp. nó lưu trữ các giá trị dưới dạng float
Nhưng đừng lo, bạn có thể định dạng lại đầu ra bằng cách sử dụng đối số định dạng
[[1, 2, 3], [4, 5], [6, 7, 8]]036 của phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]037 [thêm tại đây]
Tuy nhiên, tôi khuyên bạn nên sử dụng phương pháp 2 [Pandas] để tránh sự phức tạp không cần thiết trong mã của bạn
Có liên quan
- [Nhận sách của bạn] Coffee Break NumPy và trở thành bậc thầy về khoa học dữ liệu
Phương pháp 4. Python thuần túy không có phụ thuộc bên ngoài
Nếu bạn không muốn nhập bất kỳ thư viện nào mà vẫn chuyển đổi danh sách các danh sách thành tệp CSV, bạn cũng có thể sử dụng triển khai Python tiêu chuẩn. nó không phức tạp và hiệu quả
Tuy nhiên, nếu có thể, bạn nên dựa vào các thư viện thực hiện công việc cho bạn
Phương pháp này là tốt nhất nếu bạn không hoặc không thể sử dụng các phụ thuộc bên ngoài
[[1, 2, 3], [4, 5], [6, 7, 8]]71
đầu ra
[[1, 2, 3], [4, 5], [6, 7, 8]]72
Trong mã, trước tiên bạn mở đối tượng tệp
[[1, 2, 3], [4, 5], [6, 7, 8]]023. Sau đó, bạn lặp lại từng hàng và từng phần tử trong hàng và ghi phần tử vào tệp — từng phần một
Sau mỗi phần tử, bạn đặt dấu phẩy để tạo định dạng tệp CSV. Sau mỗi hàng, bạn đặt ký tự xuống dòng
[[1, 2, 3], [4, 5], [6, 7, 8]]039
💡 Lưu ý. Để loại bỏ dấu phẩy ở cuối, bạn có thể kiểm tra xem phần tử
[[1, 2, 3], [4, 5], [6, 7, 8]]006 có phải là phần tử cuối cùng trong hàng trong thân vòng lặp hay không và bỏ qua việc viết dấu phẩy nếu đó là
Hướng dẫn liên quan. Tham gia cộng đồng Finxter và tải xuống hơn 8 bảng cheat Python của bạn để nâng cao hiểu biết về mã của bạn
Sắp xếp Danh sách Danh sách theo Khóa
Mọi nhà khoa học máy tính đều thích sắp xếp mọi thứ. Trong phần này, tôi sẽ chỉ cho bạn cách bạn có thể sửa đổi hành vi sắp xếp mặc định của Python bằng đối số key
Định nghĩa và cách sử dụng. Để tùy chỉnh hành vi sắp xếp mặc định của phương pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]041 và
[[1, 2, 3], [4, 5], [6, 7, 8]]042, hãy sử dụng đối số tùy chọn
[[1, 2, 3], [4, 5], [6, 7, 8]]043 bằng cách chuyển một hàm trả về một giá trị có thể so sánh được cho từng phần tử trong danh sách
Sắp xếp danh sách Python[] – Hướng dẫn cơ bản
Xem video này trên YouTube
cú pháp. Bạn có thể gọi phương thức này trên từng đối tượng danh sách trong Python [Python phiên bản 2. x và 3. x]
Đây là cú pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]044Đối số Mô tả ____1043[Tùy chọn. Mặc định
[[1, 2, 3], [4, 5], [6, 7, 8]]28. ] Truyền một hàm nhận một đối số và trả về một giá trị có thể so sánh được. Hàm này sau đó được áp dụng cho từng phần tử trong danh sách. Sau đó, phương thức sắp xếp dựa trên kết quả của hàm chính thay vì chính các phần tử.
[[1, 2, 3], [4, 5], [6, 7, 8]]047[Tùy chọn. Mặc định
[[1, 2, 3], [4, 5], [6, 7, 8]]033. ] Thứ tự của các phần tử danh sách. Nếu
[[1, 2, 3], [4, 5], [6, 7, 8]]033, sắp xếp theo thứ tự tăng dần. Nếu
[[1, 2, 3], [4, 5], [6, 7, 8]]050, nó theo thứ tự giảm dần
Những bài viết liên quan
- Phương pháp danh sách Python [Tổng quan]
- Danh sách Python
[[1, 2, 3], [4, 5], [6, 7, 8]]
051 – Hướng dẫn cơ bản - Danh sách Python – Mọi thứ bạn cần biết để bắt đầu
Phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]041 lấy một hàm khác làm đối số tùy chọn
[[1, 2, 3], [4, 5], [6, 7, 8]]043 cho phép bạn sửa đổi hành vi sắp xếp mặc định
Hàm khóa sau đó được gọi trên mỗi phần tử danh sách và trả về một giá trị khác dựa trên đó việc sắp xếp được thực hiện. Do đó, hàm khóa nhận một đối số đầu vào [phần tử danh sách] và trả về một giá trị đầu ra [giá trị có thể so sánh được]
Đây là một ví dụ
[[1, 2, 3], [4, 5], [6, 7, 8]]73
Bạn có thể thấy rằng trong hai ví dụ đầu tiên, danh sách được sắp xếp theo giá trị danh sách bên trong đầu tiên
Trong ví dụ thứ ba, danh sách được sắp xếp theo giá trị danh sách bên trong thứ hai
Bạn đạt được điều này bằng cách xác định một hàm khóa
[[1, 2, 3], [4, 5], [6, 7, 8]]054 lấy một phần tử danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]006 [một danh sách riêng] làm đối số và chuyển đổi nó thành một giá trị có thể so sánh được
[[1, 2, 3], [4, 5], [6, 7, 8]]056 [giá trị danh sách thứ hai]
bài viết liên quan
- Giới thiệu về Hàm Lambda trong Python
Sắp xếp Danh sách Danh sách theo Phần tử Đầu tiên
Cả phương thức list
[[1, 2, 3], [4, 5], [6, 7, 8]]051 và hàm Python tích hợp
[[1, 2, 3], [4, 5], [6, 7, 8]]058 đều sắp xếp danh sách các danh sách theo phần tử đầu tiên của chúng
Đây là một ví dụ
[[1, 2, 3], [4, 5], [6, 7, 8]]74
Quy trình sắp xếp mặc định lấy phần tử danh sách đầu tiên của bất kỳ danh sách bên trong nào làm tiêu chí quyết định. Chỉ khi phần tử đầu tiên giống nhau cho hai giá trị, thì phần tử danh sách thứ hai sẽ được coi là phần tử kết hợp
Sắp xếp danh sách các danh sách theo từ điển
Vấn đề. Đưa ra một danh sách các danh sách. Sắp xếp danh sách các chuỗi theo thứ tự từ điển
💡 Thứ tự từ điển là sắp xếp theo phần tử danh sách bên trong đầu tiên. Nếu chúng giống nhau, bạn sắp xếp theo phần tử danh sách bên trong thứ hai, v.v.
Thí dụ
Chúng tôi muốn sắp xếp danh sách sau trong đó các phần tử đầu tiên của danh sách bên trong giống nhau
[[1, 2, 3], [4, 5], [6, 7, 8]]75
Dung dịch. Sử dụng phương pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]041 không đối số để giải danh sách theo thứ tự từ điển
[[1, 2, 3], [4, 5], [6, 7, 8]]76
Sắp xếp danh sách danh sách theo độ dài
Vấn đề. Đưa ra một danh sách các danh sách. Làm thế nào bạn có thể sắp xếp chúng theo chiều dài?
Thí dụ. Bạn muốn sắp xếp danh sách các danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]060 theo độ dài—bắt đầu với danh sách ngắn nhất
Do đó, kết quả mục tiêu của bạn là
[[1, 2, 3], [4, 5], [6, 7, 8]]061. Làm thế nào để đạt được điều đó?
Dung dịch. Sử dụng hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]062 làm đối số chính của phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]041 như thế này.
[[1, 2, 3], [4, 5], [6, 7, 8]]064
Vì hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]065 là hàm tích hợp sẵn của Python nên bạn không cần nhập hoặc xác định bất kỳ thứ gì khác
Đây là giải pháp mã
[[1, 2, 3], [4, 5], [6, 7, 8]]77
Đầu ra là danh sách được sắp xếp theo độ dài của chuỗi
[[1, 2, 3], [4, 5], [6, 7, 8]]78
Bạn cũng có thể sử dụng kỹ thuật này để sắp xếp danh sách các chuỗi theo độ dài
Danh sách hiểu Python Danh sách danh sách
Danh sách hiểu Python Danh sách danh sách
Xem video này trên YouTube
Bạn sẽ học ba cách để áp dụng khả năng hiểu danh sách vào danh sách các danh sách
- để làm phẳng một danh sách các danh sách
- để tạo một danh sách các danh sách
- để lặp qua một danh sách các danh sách
Ngoài ra, bạn sẽ học cách áp dụng khả năng hiểu danh sách lồng nhau. Vậy hãy bắt đầu
Danh sách hiểu danh sách Python Làm phẳng danh sách danh sách
Vấn đề. Đưa ra một danh sách các danh sách. Làm thế nào để làm phẳng danh sách các danh sách bằng cách loại bỏ các danh sách bên trong—và giữ nguyên các phần tử của chúng?
Thí dụ. Bạn muốn chuyển đổi một danh sách đã cho thành một danh sách phẳng như ở đây
[[1, 2, 3], [4, 5], [6, 7, 8]]79
Dung dịch. Sử dụng câu lệnh hiểu danh sách lồng nhau
[[1, 2, 3], [4, 5], [6, 7, 8]]5 để làm phẳng danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]80
Giải trình. Trong câu lệnh hiểu danh sách lồng nhau
[[1, 2, 3], [4, 5], [6, 7, 8]]5, trước tiên bạn lặp lại tất cả các danh sách trong danh sách các danh sách [
[[1, 2, 3], [4, 5], [6, 7, 8]]068]
Sau đó, bạn lặp lại tất cả các phần tử trong danh sách hiện tại [
[[1, 2, 3], [4, 5], [6, 7, 8]]069]. Phần tử này, bạn chỉ cần đặt trong danh sách bên ngoài, không thay đổi, bằng cách sử dụng nó trong phần “biểu thức” của câu lệnh hiểu danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]070
Hiểu danh sách Python Tạo danh sách danh sách
Vấn đề. Làm cách nào để tạo danh sách danh sách bằng cách sửa đổi từng thành phần của danh sách danh sách ban đầu?
Thí dụ. Bạn được cung cấp danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]81
Bạn muốn thêm một vào mỗi phần tử và tạo một danh sách các danh sách mới
[[1, 2, 3], [4, 5], [6, 7, 8]]82
Dung dịch. Sử dụng hai câu lệnh hiểu danh sách lồng nhau, một để tạo danh sách bên ngoài của danh sách và một để tạo danh sách bên trong
[[1, 2, 3], [4, 5], [6, 7, 8]]83
Giải trình. Ý tưởng chính là sử dụng như một “biểu thức” của câu lệnh hiểu danh sách bên ngoài, một câu lệnh hiểu danh sách của chính nó
Hãy nhớ rằng, bạn có thể tạo bất kỳ đối tượng nào bạn muốn trong phần biểu thức của câu lệnh đọc hiểu danh sách của mình. Đọc thêm tại đây
In Danh Sách Danh Sách Không Có Dấu ngoặc
Vấn đề. Đưa ra một danh sách các danh sách, in nó một hàng trên mỗi dòng—không có dấu ngoặc
Thí dụ. Xem xét danh sách ví dụ sau
[[1, 2, 3], [4, 5], [6, 7, 8]]84
Bạn muốn in danh sách các danh sách có ký tự xuống dòng sau mỗi danh sách bên trong
[[1, 2, 3], [4, 5], [6, 7, 8]]85
Dung dịch. Sử dụng vòng lặp for và câu lệnh
[[1, 2, 3], [4, 5], [6, 7, 8]]071 đơn giản trong đó bạn giải nén tất cả các phần tử danh sách bên trong bằng toán tử dấu hoa thị
Đây là một ví dụ
[[1, 2, 3], [4, 5], [6, 7, 8]]86
Đầu ra có hình thức mong muốn
[[1, 2, 3], [4, 5], [6, 7, 8]]85
Giải trình. Toán tử dấu hoa thị “giải nén” tất cả các giá trị trong danh sách bên trong
[[1, 2, 3], [4, 5], [6, 7, 8]]006 vào câu lệnh in
Bạn phải biết rằng câu lệnh in cũng nhận nhiều đầu vào và in chúng, được phân tách bằng khoảng trắng, ra trình bao
Những bài viết liên quan
- Toán tử giải nén *
- Cách in danh sách đẹp mắt
- Danh sách danh sách Python
- In danh sách danh sách
In danh sách danh sách với cột dòng mới & căn chỉnh
Vấn đề. Làm cách nào để in danh sách các danh sách có một dòng mới sau mỗi danh sách để các cột được căn chỉnh?
Thí dụ. Giả sử, bạn sẽ in danh sách các danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]88
Làm thế nào để căn chỉnh các cột?
[[1, 2, 3], [4, 5], [6, 7, 8]]89
Dung dịch. Sử dụng đoạn mã sau để in danh sách các danh sách và căn chỉnh tất cả các cột [bất kể mỗi chuỗi trong danh sách chiếm bao nhiêu ký tự]
[[1, 2, 3], [4, 5], [6, 7, 8]]90
Đầu ra là mong muốn
[[1, 2, 3], [4, 5], [6, 7, 8]]91
Giải trình
- Đầu tiên, bạn xác định độ dài
[[1, 2, 3], [4, 5], [6, 7, 8]]
073 [tính bằng ký tự] của chuỗi lớn nhất trong danh sách các danh sách bằng cách sử dụng câu lệnh[[1, 2, 3], [4, 5], [6, 7, 8]]
074. Mã này sử dụng vòng lặp for lồng nhau trong biểu thức trình tạo để đạt được điều này - Thứ hai, bạn lặp qua từng danh sách trong danh sách danh sách [được gọi là
[[1, 2, 3], [4, 5], [6, 7, 8]]
075] - Thứ ba, bạn tạo một biểu diễn chuỗi với các cột được căn chỉnh bằng cách 'đệm' từng phần tử hàng sao cho nó chiếm khoảng cách
[[1, 2, 3], [4, 5], [6, 7, 8]]
076 ký tự. Các ký tự còn thiếu được lấp đầy bởi khoảng trống
Bạn có thể xem mã đang hoạt động trong trình hiển thị bộ nhớ sau. Chỉ cần nhấp vào “Tiếp theo” để xem đối tượng nào được tạo trong bộ nhớ nếu bạn chạy mã bằng Python
Những bài viết liên quan. Bạn có thể cần làm mới hiểu biết của mình về các tính năng Python sau đây được sử dụng trong mã
- Danh sách hiểu và biểu thức trình tạo
- nối chuỗi[]
- In danh sách
Python Danh sách liệt kê danh sách
Giả sử, bạn đã cung cấp đoạn mã sau sử dụng hàm liệt kê trên danh sách các danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]92
đầu ra là
[[1, 2, 3], [4, 5], [6, 7, 8]]93
Hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]077 tạo một trình lặp gồm các cặp [chỉ mục, phần tử] cho tất cả các phần tử trong một danh sách nhất định
Nếu bạn có một danh sách các danh sách, các phần tử danh sách chính là danh sách
Vì vậy, hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]078 tạo các cặp [chỉ mục, danh sách]. Bạn có thể sử dụng chúng trong thân vòng lặp—ví dụ: để in độ dài của phần tử danh sách thứ i
Xóa trống – Danh sách danh sách Python
Làm cách nào bạn có thể xóa tất cả danh sách trống khỏi danh sách danh sách?
Giả sử, bạn có một danh sách các danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]079 và bạn muốn xóa tất cả các danh sách trống để lấy danh sách các danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]080
Dung dịch. Sử dụng khả năng hiểu danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]081 để lọc danh sách và xóa tất cả các danh sách trống
[[1, 2, 3], [4, 5], [6, 7, 8]]94
Điều kiện nếu
[[1, 2, 3], [4, 5], [6, 7, 8]]006 đánh giá thành
[[1, 2, 3], [4, 5], [6, 7, 8]]033 chỉ khi danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]006 trống. Trong tất cả các trường hợp khác, nó ước tính là
[[1, 2, 3], [4, 5], [6, 7, 8]]050 và phần tử được đưa vào danh sách mới
Xóa các bản sao – Danh sách danh sách Python
Làm cách nào để xóa các bản sao khỏi danh sách danh sách Python?
Xem video này trên YouTube
Cách tốt nhất để loại bỏ các bản sao khỏi danh sách danh sách Python là gì?
Đây là một câu hỏi phỏng vấn mã hóa phổ biến tại Google, Facebook và Amazon. Trong phần sau, tôi sẽ chỉ cho bạn cách [và tại sao] nó hoạt động—vì vậy hãy tiếp tục đọc
Phương pháp 1. Phương pháp ngây thơ
thuật toán
- Đi qua từng phần tử và kiểm tra xem phần tử này đã tồn tại trong danh sách chưa
- Nếu vậy, loại bỏ nó
Vấn đề là phương pháp này có độ phức tạp theo thời gian bậc hai vì bạn cần kiểm tra từng phần tử nếu nó tồn tại trong danh sách [là
[[1, 2, 3], [4, 5], [6, 7, 8]]086 cho các phần tử
[[1, 2, 3], [4, 5], [6, 7, 8]]073]
[[1, 2, 3], [4, 5], [6, 7, 8]]95
Phương pháp 2. Chuyển đổi từ điển tạm thời
thuật toán. Một cách hiệu quả hơn về độ phức tạp về thời gian là tạo một từ điển từ các phần tử trong danh sách để loại bỏ tất cả các bản sao và chuyển đổi từ điển trở lại danh sách
Điều này giữ nguyên thứ tự của các phần tử danh sách ban đầu
[[1, 2, 3], [4, 5], [6, 7, 8]]96
Tất cả bốn phương thức con sau đây đều là hoạt động thời gian chạy tuyến tính
Do đó, thuật toán có độ phức tạp thời gian chạy tuyến tính và hiệu quả hơn cách tiếp cận ngây thơ [phương pháp 1]
- Chuyển đổi thành danh sách các bộ bằng cách sử dụng hiểu danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]
088. Các bộ dữ liệu có thể băm được và có thể được sử dụng làm khóa từ điển—trong khi danh sách không thể - Chuyển đổi danh sách các bộ dữ liệu thành từ điển với
[[1, 2, 3], [4, 5], [6, 7, 8]]
089 để ánh xạ các bộ dữ liệu thành các giá trị giả. Mỗi khóa từ điển chỉ có thể tồn tại một lần nên các khóa trùng lặp sẽ bị xóa tại thời điểm này - Chuyển đổi từ điển thành danh sách các bộ dữ liệu với
[[1, 2, 3], [4, 5], [6, 7, 8]]
090 - Chuyển đổi danh sách các bộ dữ liệu thành danh sách các danh sách bằng cách sử dụng hiểu danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]
091
Mỗi phần tử danh sách [= một danh sách] trở thành một bộ trở thành một khóa mới cho từ điển
Ví dụ, danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]092 trở thành danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]093 từ điển
[[1, 2, 3], [4, 5], [6, 7, 8]]094. Không có}
Tất cả các phần tử xảy ra nhiều lần sẽ được gán cho cùng một khóa. Do đó, từ điển chỉ chứa các khóa duy nhất—không thể có nhiều khóa bằng nhau
Là giá trị từ điển, bạn lấy giá trị giả [theo mặc định]
Sau đó, bạn chuyển đổi từ điển trở lại danh sách các danh sách, loại bỏ các giá trị giả
Từ điển Python có duy trì thứ tự của các phím không?
Đáng ngạc nhiên, các khóa từ điển trong Python giữ nguyên thứ tự của các phần tử. Vì vậy, vâng, thứ tự của các phần tử được giữ nguyên. [nguồn]
Điều này gây ngạc nhiên cho nhiều độc giả vì vô số tài nguyên trực tuyến như tài liệu này cho rằng thứ tự của các khóa từ điển không được bảo toàn
Họ giả định rằng việc triển khai cơ bản của các lần lặp khóa từ điển sử dụng các tập hợp—và các tập hợp nổi tiếng là không thể xác định được thứ tự của các phần tử
Nhưng giả định này là sai. Việc triển khai từ điển Python tích hợp trong cPython giữ nguyên thứ tự
Đây là một ví dụ, vui lòng tạo các ví dụ và thử nghiệm của riêng bạn để kiểm tra xem thứ tự có được giữ nguyên không
[[1, 2, 3], [4, 5], [6, 7, 8]]97
Bạn thấy thứ tự các phần tử được giữ nguyên nên khi chuyển đổi ngược lại thứ tự ban đầu của các phần tử danh sách vẫn được giữ nguyên
[[1, 2, 3], [4, 5], [6, 7, 8]]98
Tuy nhiên, bạn không thể dựa vào nó vì về mặt lý thuyết, bất kỳ triển khai Python nào cũng có thể quyết định không duy trì trật tự [lưu ý “COULD” ở đây là 100% lý thuyết và không áp dụng cho triển khai cPython mặc định]
Nếu bạn cần chắc chắn rằng thứ tự được giữ nguyên, bạn có thể sử dụng thư viện từ điển đã đặt hàng. Trong cPython, đây chỉ là một trình bao bọc để triển khai dict mặc định
Phương pháp 3. Đặt chuyển đổi
Đưa ra một danh sách các danh sách, mục tiêu là loại bỏ tất cả các phần tử tồn tại nhiều lần trong danh sách
Các bộ trong Python chỉ cho phép một phiên bản duy nhất của một phần tử. Vì vậy, bằng cách chuyển đổi danh sách thành một tập hợp, tất cả các bản sao sẽ bị xóa
Trái ngược với cách tiếp cận ngây thơ [kiểm tra tất cả các cặp phần tử nếu chúng trùng lặp] có độ phức tạp thời gian bậc hai, phương pháp này có độ phức tạp thời gian chạy tuyến tính
Tại sao?
Bởi vì độ phức tạp thời gian chạy của việc tạo một tập hợp là tuyến tính theo số lượng phần tử của tập hợp. Bây giờ, bạn chuyển đổi tập hợp trở lại danh sách và thì đấy, các bản sao sẽ bị xóa
[[1, 2, 3], [4, 5], [6, 7, 8]]99
Tuy nhiên, việc chuyển đổi danh sách thành tập hợp không đảm bảo giữ nguyên thứ tự của các phần tử danh sách. Bộ mất tất cả thông tin đặt hàng
Ngoài ra, bạn không thể tạo tập hợp danh sách vì danh sách là loại dữ liệu không thể băm
lst = [[1, 2], [3, 4]]00
Nhưng chúng ta có thể tìm ra cách giải quyết đơn giản cho cả hai vấn đề như bạn sẽ thấy trong phương pháp sau
Phương pháp thời gian chạy tuyến tính với thiết lập để loại bỏ các bản sao khỏi danh sách danh sách
Cách tiếp cận thứ ba này sử dụng một tập hợp để kiểm tra xem phần tử đã có trong danh sách không trùng lặp chưa
Vì kiểm tra tư cách thành viên trên bộ nhanh hơn nhiều so với kiểm tra tư cách thành viên trên danh sách, nên phương pháp này cũng có độ phức tạp thời gian chạy tuyến tính [tư cách thành viên có độ phức tạp thời gian chạy không đổi]
lst = [[1, 2], [3, 4]]01
Cách tiếp cận loại bỏ các bản sao khỏi danh sách trong khi vẫn duy trì thứ tự của các phần tử cũng có độ phức tạp thời gian chạy tuyến tính
Và nó hoạt động với tất cả các ngôn ngữ lập trình mà bạn không cần phải biết chi tiết triển khai về từ điển trong Python. Nhưng mặt khác, nó phức tạp hơn một chút
Những bài viết liên quan
- Làm cách nào để xóa các bản sao khỏi danh sách danh sách trong Python?
- Xóa danh sách Python
- Hướng dẫn Cơ bản về Từ điển Python
- Xóa các bản sao khỏi danh sách Python
- Danh sách danh sách Python
Đảo ngược - Danh sách danh sách Python
[[1, 2, 3], [4, 5], [6, 7, 8]]095 đảo ngược thứ tự của các phần tử trong
[[1, 2, 3], [4, 5], [6, 7, 8]]003. Nếu bạn muốn tạo một danh sách mới với các phần tử bị đảo ngược, hãy sử dụng phép cắt với kích thước bước âm
[[1, 2, 3], [4, 5], [6, 7, 8]]097
Đây là một ví dụ ngắn
lst = [[1, 2], [3, 4]]02
Trong dòng đầu tiên của ví dụ, bạn tạo danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]6. Sau đó, bạn đảo ngược thứ tự của các phần tử trong danh sách và in nó ra trình bao
đảo ngược phẳng
Nhưng nếu bạn sử dụng phương pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]099 trên danh sách các danh sách, bạn chỉ thu được đảo ngược “phẳng”—chỉ đảo ngược danh sách bên ngoài chứ không đảo ngược danh sách bên trong
lst = [[1, 2], [3, 4]]03
Vì vậy, thứ tự của hai danh sách bên trong hiện đã bị đảo ngược nhưng không phải thứ tự của các phần tử danh sách của chúng
sâu đảo ngược
Điều gì sẽ xảy ra nếu bạn không chỉ muốn đảo ngược danh sách mà còn chạy ngược sâu trong đó tất cả các danh sách lồng nhau cũng được đảo ngược theo cách đệ quy?
Đây là cách bạn có thể làm điều đó
lst = [[1, 2], [3, 4]]04
Không chỉ danh sách cấp một bị đảo ngược mà cả danh sách cấp hai. Mã được lấy cảm hứng từ bài viết này
Zip Python Danh sách các danh sách
Hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]100 lấy một số lần lặp và tổng hợp chúng thành một lần duy nhất bằng cách kết hợp các giá trị thứ i của mỗi lần lặp thành một bộ
Ví dụ: nén các danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]101 và
[[1, 2, 3], [4, 5], [6, 7, 8]]102 thành
[[1, 2, 3], [4, 5], [6, 7, 8]]103
Vấn đề. Việc chuyển danh sách các danh sách vào hàm zip không hoạt động vì hàm zip yêu cầu số lần lặp tùy ý [chứ không phải số lần lặp của các lần lặp]
Thí dụ. Giả sử, bạn muốn nén một danh sách các danh sách
lst = [[1, 2], [3, 4]]05
🛑 CHÚ Ý. MÃ NÀY KHÔNG HOÀN THÀNH ĐIỀU NÀY
Dung dịch. Giải nén các danh sách trong danh sách các danh sách bằng cách sử dụng toán tử dấu hoa thị “giải nén”
[[1, 2, 3], [4, 5], [6, 7, 8]]104
lst = [[1, 2], [3, 4]]06
Nghĩ theo cách này. toán tử dấu hoa thị loại bỏ dấu ngoặc "bên ngoài" của danh sách và chuyển tất cả các danh sách bên trong làm đối số
Lưu ý rằng bạn cũng chuyển đổi đối tượng zip được hàm zip trả về thành danh sách bằng cách sử dụng hàm tạo
[[1, 2, 3], [4, 5], [6, 7, 8]]105
Giải nén Python Danh sách danh sách
Bạn đã xem một ví dụ về giải nén danh sách các danh sách trong phần trước [hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]106]
lst = [[1, 2], [3, 4]]06
Hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]106 mong đợi một số lần lặp nhưng danh sách các danh sách chỉ là một lần lặp duy nhất
Để giải quyết vấn đề này, bạn giải nén các danh sách bên trong vào hàm zip để sử dụng chúng làm đối số cho các lần lặp. Bằng cách này,
[[1, 2, 3], [4, 5], [6, 7, 8]]100 chạy với ba đối số có thể lặp lại.
[[1, 2, 3], [4, 5], [6, 7, 8]]109,
[[1, 2, 3], [4, 5], [6, 7, 8]]110 và
[[1, 2, 3], [4, 5], [6, 7, 8]]111
bài viết liên quan. Toán tử giải nén [Dấu hoa thị]
Trung bình - Danh sách danh sách Python
Làm cách nào để tính trung bình một danh sách các danh sách trong Python?
Xem video này trên YouTube
Vấn đề. Bạn có một danh sách các danh sách và bạn muốn tính trung bình cộng của các cột khác nhau
Thí dụ. Cho danh sách sau đây gồm các danh sách có bốn hàng và ba cột
lst = [[1, 2], [3, 4]]08
Bạn muốn có các giá trị trung bình của ba cột
lst = [[1, 2], [3, 4]]09
Phương pháp 1. Trung bình bằng Python [Không có thư viện]
Một lớp lót đơn giản với khả năng hiểu danh sách kết hợp với hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]100 trên danh sách đã giải nén để chuyển đổi danh sách các danh sách thực hiện công việc trong Python
lst = [[1, 2], [3, 4]]20
Bạn có thích Python one-liners? . Nhấp để xem sách trong tab mới
Bạn có thể hình dung việc thực thi mã và các đối tượng bộ nhớ của mã này trong công cụ sau [chỉ cần nhấp vào “Tiếp theo” để xem cách một bước của mã mở ra]
Phương pháp 2. Trung bình với Thư viện NumPy
Bạn tạo một mảng NumPy từ dữ liệu và chuyển nó tới hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]113
lst = [[1, 2], [3, 4]]21
Đối số
[[1, 2, 3], [4, 5], [6, 7, 8]]114 của hàm trung bình xác định bạn muốn tính giá trị trung bình dọc theo trục nào
- Nếu bạn muốn tính trung bình các cột, hãy xác định
[[1, 2, 3], [4, 5], [6, 7, 8]]
115 - Nếu bạn muốn tính trung bình các hàng, hãy xác định
[[1, 2, 3], [4, 5], [6, 7, 8]]
116 - Nếu bạn muốn tính trung bình trên tất cả các giá trị, hãy bỏ qua đối số này
Phương pháp 3. Thư viện thống kê trung bình + Bản đồ []
Chỉ để cho bạn thấy một giải pháp thay thế khác, đây là một giải pháp sử dụng hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]009 và thủ thuật
[[1, 2, 3], [4, 5], [6, 7, 8]]118 của chúng tôi để chuyển đổi “ma trận”
[[1, 2, 3], [4, 5], [6, 7, 8]]119
lst = [[1, 2], [3, 4]]22
Hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]120 áp dụng
[[1, 2, 3], [4, 5], [6, 7, 8]]121 cho từng phần tử trong
[[1, 2, 3], [4, 5], [6, 7, 8]]122
Thay vào đó, bạn cũng có thể sử dụng khả năng hiểu danh sách như trong phương pháp 1 trong hướng dẫn này
💡 Trên thực tế, Guido van Rossum, người tạo ra Python và nhà độc tài nhân từ suốt đời [BDFL] của Python, thích hiểu danh sách hơn hàm
[[1, 2, 3], [4, 5], [6, 7, 8]]009
Danh sách tổng của Python
Làm cách nào để tính tổng danh sách các danh sách trong Python?
Xem video này trên YouTube
Vấn đề. Cho một danh sách gồm các danh sách biểu diễn một ma trận dữ liệu có n hàng và m cột. Làm thế nào để tổng hợp trên các cột của ma trận này?
Trong phần sau, bạn sẽ tìm hiểu các cách khác nhau để thực hiện điều này trong Python
Hãy đảm bảo rằng bạn đang ở trên cùng một trang. Đây là một biểu diễn đồ họa của danh sách các danh sách và những gì bạn muốn đạt được
Thí dụ. Cho đoạn mã sau
lst = [[1, 2], [3, 4]]23
Tiếp theo, bạn sẽ học ba phương pháp khác nhau để tính tổng trên các cột
Những bài viết liên quan
- Làm cách nào để tính trung bình trên một danh sách các danh sách trong Python?
Bản sao phẳng – Danh sách danh sách Python
Trước khi bạn có thể thực sự hiểu phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]124 trong Python, bạn phải hiểu khái niệm về “bản sao nông” hoặc “bản sao phẳng”
Trong các ngôn ngữ hướng đối tượng như Python, mọi thứ đều là đối tượng. Danh sách là đối tượng và các phần tử trong danh sách cũng là đối tượng
Một bản sao nông của danh sách tạo một đối tượng danh sách mới—bản sao—nhưng nó không tạo các phần tử danh sách mới mà chỉ sao chép các tham chiếu đến các đối tượng này
Bạn có thể thấy rằng danh sách bên dưới chỉ là một bản sao nông trỏ đến các phần tử giống như danh sách gốc
Trong Python, phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]125 chỉ tạo ra một bản sao nông có độ phức tạp thời gian chạy nhanh hơn nhiều
Đây là một ví dụ hiển thị chính xác kịch bản này
lst = [[1, 2], [3, 4]]24
Việc thay đổi thành phần danh sách thứ ba của danh sách được sao chép sẽ tác động đến thành phần danh sách thứ ba của danh sách gốc
Do đó, đầu ra là
lst = [[1, 2], [3, 4]]25
Bạn có thể xem trực quan hóa quá trình thực thi trực tiếp trong công cụ tuyệt vời sau đây để trực quan hóa việc sử dụng bộ nhớ của đoạn mã Python này ở mọi giai đoạn thực thi. Chỉ cần nhấp vào “Tiếp theo” để xem bộ nhớ mở ra như thế nào
Dấu. Nếu bạn sao chép một danh sách các danh sách bằng phương pháp
[[1, 2, 3], [4, 5], [6, 7, 8]]125, hãy lưu ý rằng bất kỳ thay đổi nào bạn đang thực hiện trên một danh sách trong danh sách các danh sách đã sao chép đều hiển thị trong danh sách gốc
Nếu bạn không ổn với điều đó, hãy xem phần sau về các bản sao sâu của danh sách Python
Bản sao sâu - Danh sách danh sách Python
Đã hiểu khái niệm về bản sao nông, giờ đây thật dễ dàng để hiểu khái niệm về bản sao sâu
Đọc bài viết của tôi so với bản sao nông sâu để hiểu sâu hơn
- Một bản sao nông chỉ sao chép các tham chiếu của các phần tử danh sách
- Một bản sao sâu sao chép chính các phần tử danh sách, điều này có thể dẫn đến hành vi đệ quy cao vì các phần tử danh sách có thể là danh sách cần được sao chép sâu, v.v.
Đây là một bản sao sâu đơn giản của cùng một danh sách như được hiển thị trước đó
Ngược lại với bản sao nông, danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]109 được sao chép riêng cho danh sách bản sao sâu. Nếu một người thay đổi danh sách lồng nhau này trong danh sách gốc, thay đổi đó sẽ không hiển thị ở bản sao sâu. [Vì danh sách lồng nhau của deep copy list là một đối tượng độc lập trong bộ nhớ. ]
Lưu ý rằng trong một bản sao sâu, không được sao chép đối tượng chuỗi. Tại sao?
Để có bản sao sâu bằng Python, hãy nhập mô-đun
[[1, 2, 3], [4, 5], [6, 7, 8]]128 và sử dụng phương thức
[[1, 2, 3], [4, 5], [6, 7, 8]]129
lst = [[1, 2], [3, 4]]26
Một lần nữa, hãy hình dung luồng thực thi của đoạn mã sau ngay tại đây trong trình duyệt của bạn bằng cách nhấp vào “Tiếp theo”
Những bài viết liên quan
- Giới thiệu về Slicing trong Python
- Sao chép danh sách Python [Hướng dẫn đầy đủ]
- Phương pháp liệt kê bảng gian lận
- hướng dẫn danh sách
Làm cách nào để lọc danh sách danh sách Python?
Câu trả lời ngắn. Để lọc danh sách các danh sách cho một điều kiện trong danh sách bên trong, hãy sử dụng câu lệnh hiểu danh sách
[[1, 2, 3], [4, 5], [6, 7, 8]]130 và thay thế
[[1, 2, 3], [4, 5], [6, 7, 8]]131 bằng điều kiện lọc của bạn trả về
[[1, 2, 3], [4, 5], [6, 7, 8]]050 để bao gồm danh sách bên trong
[[1, 2, 3], [4, 5], [6, 7, 8]]006 và ngược lại là
[[1, 2, 3], [4, 5], [6, 7, 8]]033
Làm cách nào để lọc danh sách trong Python?
Xem video này trên YouTube
Danh sách thuộc về cấu trúc dữ liệu quan trọng nhất trong Python—mọi lập trình viên bậc thầy đều thuộc lòng chúng. Đáng ngạc nhiên là ngay cả những lập trình viên trung cấp cũng không biết cách tốt nhất để lọc một danh sách—chứ đừng nói đến danh sách các danh sách trong Python. Hướng dẫn này chỉ cho bạn cách thực hiện cái sau
Vấn đề. Giả sử, bạn có một danh sách các danh sách. Bạn muốn lọc danh sách các danh sách để chỉ còn lại những danh sách bên trong thỏa mãn một điều kiện nào đó. Điều kiện là một chức năng của danh sách bên trong—chẳng hạn như giá trị trung bình hoặc tổng của các phần tử danh sách bên trong
Thí dụ. Đưa ra danh sách các danh sách sau đây với các phép đo nhiệt độ hàng tuần mỗi tuần—và một danh sách bên trong mỗi tuần
lst = [[1, 2], [3, 4]]27
Làm cách nào để lọc ra các tuần lạnh hơn với giá trị nhiệt độ trung bình