Làm cách nào để bạn chọn người dùng từ danh sách trong python?
Python nổi tiếng vì cho phép bạn viết mã thanh lịch, dễ viết và gần như dễ đọc như tiếng Anh thuần túy. Một trong những tính năng đặc biệt nhất của ngôn ngữ này là khả năng hiểu danh sách mà bạn có thể sử dụng để tạo chức năng mạnh mẽ trong một dòng mã. Tuy nhiên, nhiều nhà phát triển gặp khó khăn trong việc tận dụng triệt để các tính năng nâng cao hơn của khả năng hiểu danh sách trong Python. Một số lập trình viên thậm chí sử dụng chúng quá nhiều, điều này có thể dẫn đến mã kém hiệu quả và khó đọc hơn Show
Khi kết thúc hướng dẫn này, bạn sẽ hiểu toàn bộ sức mạnh của khả năng hiểu danh sách Python và cách sử dụng các tính năng của chúng một cách thoải mái. Bạn cũng sẽ hiểu được những đánh đổi khi sử dụng chúng để bạn có thể xác định khi nào các phương pháp khác phù hợp hơn Trong hướng dẫn này, bạn sẽ học cách
Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn Cách tạo danh sách trong PythonCó một số cách khác nhau để bạn có thể tạo danh sách trong Python. Để hiểu rõ hơn về sự đánh đổi của việc sử dụng khả năng hiểu danh sách trong Python, trước tiên hãy xem cách tạo danh sách bằng các phương pháp này Loại bỏ các quảng cáoSử dụng vòng lặp >>> squares = [i * i for i in range(10)] >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 6Loại vòng lặp phổ biến nhất là vòng lặp 6. Bạn có thể sử dụng vòng lặp 6 để tạo danh sách các phần tử trong ba bước
Nếu bạn muốn tạo một danh sách chứa mười ô vuông hoàn hảo đầu tiên, thì bạn có thể hoàn thành các bước này trong ba dòng mã >>>
Ở đây, bạn khởi tạo một danh sách trống, 9. Sau đó, bạn sử dụng vòng lặp 6 để lặp lại trên 1. Cuối cùng, bạn nhân từng số với chính nó và nối kết quả vào cuối danh sáchSử dụng đối tượng >>> squares = [i * i for i in range(10)] >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 3 3 cung cấp một cách tiếp cận thay thế dựa trên lập trình chức năng. Bạn truyền vào một hàm và một iterable, và 3 sẽ tạo một đối tượng. Đối tượng này chứa đầu ra mà bạn sẽ nhận được khi chạy từng phần tử có thể lặp lại thông qua hàm được cung cấpVí dụ, hãy xem xét một tình huống trong đó bạn cần tính giá sau thuế cho một danh sách các giao dịch >>> 3Ở đây, bạn có một 5 có thể lặp lại và một hàm 6. Bạn chuyển cả hai đối số này cho 3 và lưu trữ đối tượng kết quả trong 8. Bạn có thể dễ dàng chuyển đổi đối tượng bản đồ này thành danh sách bằng cách sử dụng 9Sử dụng danh sách hiểuHiểu danh sách là cách thứ ba để tạo danh sách. Với cách tiếp cận tao nhã này, bạn có thể viết lại vòng lặp 6 từ ví dụ đầu tiên chỉ trong một dòng mã>>>
Thay vì tạo một danh sách trống và thêm từng phần tử vào cuối, bạn chỉ cần xác định đồng thời danh sách và nội dung của nó bằng cách tuân theo định dạng này >>>
Mọi khả năng hiểu danh sách trong Python bao gồm ba yếu tố
Bởi vì yêu cầu về biểu thức rất linh hoạt nên khả năng hiểu danh sách trong Python hoạt động tốt ở nhiều nơi mà bạn sẽ sử dụng 3. Bạn có thể viết lại ví dụ về giá với khả năng hiểu danh sách của riêng mình>>> 2Điểm khác biệt duy nhất giữa cách triển khai này và 3 là khả năng hiểu danh sách trong Python trả về một danh sách, không phải đối tượng bản đồLoại bỏ các quảng cáoLợi ích của việc sử dụng danh sách hiểuKhả năng hiểu danh sách thường được mô tả là Pythonic hơn các vòng lặp hoặc 3. Nhưng thay vì mù quáng chấp nhận đánh giá đó, bạn nên hiểu lợi ích của việc sử dụng khả năng hiểu danh sách trong Python khi so sánh với các lựa chọn thay thế. Sau này, bạn sẽ tìm hiểu về một vài tình huống trong đó các giải pháp thay thế là lựa chọn tốt hơnMột lợi ích chính của việc sử dụng khả năng hiểu danh sách trong Python là nó là một công cụ duy nhất mà bạn có thể sử dụng trong nhiều tình huống khác nhau. Ngoài việc tạo danh sách tiêu chuẩn, khả năng hiểu danh sách cũng có thể được sử dụng để ánh xạ và lọc. Bạn không phải sử dụng một cách tiếp cận khác cho từng tình huống Đây là lý do chính tại sao khả năng hiểu danh sách được coi là Pythonic, vì Python bao gồm các công cụ đơn giản, mạnh mẽ mà bạn có thể sử dụng trong nhiều tình huống khác nhau. Là một lợi ích bổ sung, bất cứ khi nào bạn sử dụng khả năng hiểu danh sách trong Python, bạn sẽ không cần phải nhớ thứ tự thích hợp của các đối số như khi bạn gọi 3Khả năng hiểu danh sách cũng mang tính khai báo hơn so với vòng lặp, điều đó có nghĩa là chúng dễ đọc và dễ hiểu hơn. Vòng lặp yêu cầu bạn tập trung vào cách tạo danh sách. Bạn phải tạo danh sách trống theo cách thủ công, lặp qua các phần tử và thêm từng phần tử vào cuối danh sách. Với khả năng hiểu danh sách trong Python, thay vào đó, bạn có thể tập trung vào những gì bạn muốn đưa vào danh sách và tin tưởng rằng Python sẽ đảm nhận việc xây dựng danh sách diễn ra như thế nào Làm thế nào để nâng cao khả năng hiểu của bạnĐể hiểu toàn bộ giá trị mà tính năng hiểu danh sách có thể cung cấp, bạn nên hiểu phạm vi chức năng có thể có của chúng. Bạn cũng sẽ muốn hiểu những thay đổi sắp xảy ra với khả năng hiểu danh sách trong Python 3. 8 Sử dụng logic có điều kiệnTrước đó, bạn đã thấy công thức này về cách tạo khả năng hiểu danh sách >>>
Mặc dù công thức này chính xác nhưng nó cũng hơi thiếu sót. Một mô tả đầy đủ hơn về công thức hiểu thêm hỗ trợ cho các điều kiện tùy chọn. Cách phổ biến nhất để thêm logic điều kiện vào khả năng hiểu danh sách là thêm điều kiện vào cuối biểu thức >>> 4Ở đây, câu điều kiện của bạn xuất hiện ngay trước dấu ngoặc đóng Các điều kiện rất quan trọng vì chúng cho phép hiểu danh sách để lọc ra các giá trị không mong muốn, thông thường sẽ yêu cầu gọi tới 5>>> 6Trong khối mã này, câu lệnh điều kiện lọc ra bất kỳ ký tự nào trong 2 không phải là nguyên âmĐiều kiện có thể kiểm tra bất kỳ biểu thức hợp lệ nào. Nếu bạn cần một bộ lọc phức tạp hơn, thì bạn thậm chí có thể chuyển logic điều kiện sang một chức năng riêng biệt >>> 8Tại đây, bạn tạo một bộ lọc phức tạp 3 và chuyển hàm này làm câu lệnh điều kiện để bạn hiểu danh sách. Lưu ý rằng giá trị thành viên 24 cũng được truyền dưới dạng đối số cho hàm của bạnBạn có thể đặt điều kiện ở cuối câu lệnh để lọc đơn giản, nhưng nếu bạn muốn thay đổi giá trị thành phần thay vì lọc ra thì sao? >>> 1Với công thức này, bạn có thể sử dụng logic có điều kiện để chọn từ nhiều tùy chọn đầu ra có thể. Ví dụ: nếu bạn có một danh sách giá, thì bạn có thể muốn thay thế giá âm bằng 5 và giữ nguyên các giá trị dương>>> 30Ở đây, biểu thức của bạn 24 chứa một câu điều kiện, 7. Điều này yêu cầu Python xuất giá trị của 24 nếu số dương, nhưng thay đổi 24 thành 5 nếu số âm. Nếu điều này có vẻ quá sức, thì có thể hữu ích nếu xem logic điều kiện là chức năng của chính nó>>> 31Bây giờ, câu lệnh điều kiện của bạn được chứa trong 41 và bạn có thể sử dụng nó như một phần của biểu thức hiểu danh sách của mìnhLoại bỏ các quảng cáoSử dụng cách hiểu tập hợp và từ điểnMặc dù khả năng hiểu danh sách trong Python là một công cụ phổ biến, nhưng bạn cũng có thể tạo khả năng hiểu bộ và từ điển. Khả năng hiểu tập hợp gần giống hệt như khả năng hiểu danh sách trong Python. Sự khác biệt là thiết lập mức độ hiểu đảm bảo đầu ra không chứa bản sao. Bạn có thể tạo khả năng hiểu tập hợp bằng cách sử dụng dấu ngoặc nhọn thay vì dấu ngoặc >>> 32Khả năng hiểu tập hợp của bạn đưa ra tất cả các nguyên âm duy nhất mà nó tìm thấy trong 42. Không giống như danh sách, bộ không đảm bảo rằng các mục sẽ được lưu theo bất kỳ thứ tự cụ thể nào. Đây là lý do tại sao thành viên đầu tiên của tập hợp là 43, mặc dù nguyên âm đầu tiên trong 42 là 24Việc hiểu từ điển cũng tương tự, với yêu cầu bổ sung là xác định khóa >>> 33Để tạo từ điển 9, bạn sử dụng dấu ngoặc nhọn ( 47) cũng như cặp khóa-giá trị ( 48) trong biểu thức của mìnhSử dụng toán tử WalrusTrăn 3. 8 sẽ giới thiệu biểu thức gán hay còn gọi là toán tử hải mã. Để hiểu cách bạn có thể sử dụng nó, hãy xem xét ví dụ sau Giả sử bạn cần thực hiện 10 yêu cầu đối với API sẽ trả về dữ liệu nhiệt độ. Bạn chỉ muốn trả lại kết quả lớn hơn 100 độ F. Giả sử rằng mỗi yêu cầu sẽ trả về dữ liệu khác nhau. Trong trường hợp này, không có cách nào sử dụng khả năng hiểu danh sách trong Python để giải quyết vấn đề. Công thức 49 không cung cấp cách nào để điều kiện gán dữ liệu cho một biến mà biểu thức có thể truy cậpToán tử hải mã giải quyết vấn đề này. Nó cho phép bạn chạy một biểu thức đồng thời gán giá trị đầu ra cho một biến. Ví dụ sau đây cho thấy điều này có thể thực hiện được như thế nào, sử dụng 60 để tạo dữ liệu thời tiết giả>>> 34Bạn sẽ không thường xuyên cần sử dụng biểu thức gán bên trong phần hiểu danh sách trong Python, nhưng đó là một công cụ hữu ích để bạn sử dụng khi cần thiết Khi nào không sử dụng hiểu danh sách trong PythonKhả năng hiểu danh sách rất hữu ích và có thể giúp bạn viết mã thanh lịch, dễ đọc và gỡ lỗi, nhưng chúng không phải là lựa chọn phù hợp cho mọi trường hợp. Chúng có thể làm cho mã của bạn chạy chậm hơn hoặc sử dụng nhiều bộ nhớ hơn. Nếu mã của bạn kém hiệu quả hơn hoặc khó hiểu hơn, thì có lẽ tốt hơn là chọn một giải pháp thay thế Coi chừng hiểu lồng nhauKhả năng hiểu có thể được lồng vào nhau để tạo các tổ hợp danh sách, từ điển và bộ trong một bộ sưu tập. Ví dụ: giả sử một phòng thí nghiệm khí hậu đang theo dõi nhiệt độ cao ở năm thành phố khác nhau trong tuần đầu tiên của tháng Sáu. Cấu trúc dữ liệu hoàn hảo để lưu trữ dữ liệu này có thể là cách hiểu danh sách Python được lồng trong cách hiểu từ điển >>> 35Bạn tạo bộ sưu tập bên ngoài 61 với khả năng hiểu từ điển. Biểu thức là một cặp khóa-giá trị, chứa đựng một cách hiểu khác. Mã này sẽ nhanh chóng tạo danh sách dữ liệu cho từng thành phố trong 62Danh sách lồng nhau là một cách phổ biến để tạo ma trận, thường được sử dụng cho mục đích toán học. Hãy nhìn vào khối mã dưới đây >>> 36Khả năng hiểu danh sách bên ngoài 63 tạo ra sáu hàng, trong khi khả năng hiểu danh sách bên trong 64 lấp đầy mỗi hàng này bằng các giá trịCho đến nay, mục đích của mỗi cách hiểu lồng nhau là khá trực quan. Tuy nhiên, có những tình huống khác, chẳng hạn như làm phẳng các danh sách lồng nhau, trong đó logic được cho là khiến mã của bạn trở nên khó hiểu hơn. Lấy ví dụ này, sử dụng cách hiểu danh sách lồng nhau để làm phẳng ma trận >>> 37Mã để làm phẳng ma trận ngắn gọn nhưng có thể không trực quan để hiểu cách thức hoạt động của nó. Mặt khác, nếu bạn sử dụng vòng lặp 6 để làm phẳng cùng một ma trận, thì mã của bạn sẽ đơn giản hơn nhiều>>> 38Bây giờ bạn có thể thấy rằng mã đi qua một hàng của ma trận tại một thời điểm, lấy ra tất cả các phần tử trong hàng đó trước khi chuyển sang hàng tiếp theo Mặc dù cách hiểu danh sách lồng nhau một dòng có vẻ giống Pythonic hơn, nhưng điều quan trọng nhất là viết mã mà nhóm của bạn có thể dễ dàng hiểu và sửa đổi. Khi bạn chọn cách tiếp cận của mình, bạn sẽ phải đưa ra quyết định dựa trên việc bạn nghĩ rằng khả năng hiểu giúp ích hay làm tổn hại khả năng đọc Loại bỏ các quảng cáoChọn Trình tạo cho Bộ dữ liệu lớnKhả năng hiểu danh sách trong Python hoạt động bằng cách tải toàn bộ danh sách đầu ra vào bộ nhớ. Đối với các danh sách nhỏ hoặc thậm chí có kích thước trung bình, điều này thường ổn. Nếu bạn muốn tính tổng bình phương của một nghìn số nguyên đầu tiên, thì việc hiểu danh sách sẽ giải quyết vấn đề này một cách đáng ngưỡng mộ >>> 39Nhưng nếu bạn muốn tính tổng bình phương của một tỷ số nguyên đầu tiên thì sao? . Đó là bởi vì Python đang cố gắng tạo một danh sách với một tỷ số nguyên, tiêu tốn nhiều bộ nhớ hơn so với máy tính của bạn muốn. Máy tính của bạn có thể không có tài nguyên cần thiết để tạo một danh sách khổng lồ và lưu trữ nó trong bộ nhớ. Nếu bạn vẫn cố làm thì máy của bạn có thể chạy chậm hoặc thậm chí bị hỏng Khi kích thước của danh sách trở nên có vấn đề, việc sử dụng trình tạo thay vì hiểu danh sách trong Python thường hữu ích. Trình tạo không tạo một cấu trúc dữ liệu lớn, duy nhất trong bộ nhớ mà thay vào đó trả về một cấu trúc có thể lặp lại. Mã của bạn có thể yêu cầu giá trị tiếp theo từ khả năng lặp lại nhiều lần nếu cần hoặc cho đến khi bạn đi đến cuối chuỗi của mình, trong khi chỉ lưu trữ một giá trị tại một thời điểm Nếu bạn tính tổng một tỷ ô vuông đầu tiên bằng một trình tạo, thì chương trình của bạn có thể sẽ chạy trong một thời gian, nhưng nó sẽ không khiến máy tính của bạn bị treo. Ví dụ dưới đây sử dụng một trình tạo >>> 0Bạn có thể biết đây là trình tạo vì biểu thức không được bao quanh bởi dấu ngoặc hoặc dấu ngoặc nhọn. Tùy chọn, các trình tạo có thể được bao quanh bởi dấu ngoặc đơn Ví dụ trên vẫn đòi hỏi nhiều công việc, nhưng nó thực hiện các thao tác một cách lười biếng. Do lười đánh giá, các giá trị chỉ được tính khi chúng được yêu cầu rõ ràng. Sau khi trình tạo tạo ra một giá trị (ví dụ: 66), nó có thể thêm giá trị đó vào tổng đang chạy, sau đó loại bỏ giá trị đó và tạo giá trị tiếp theo ( 67). Khi hàm tổng yêu cầu giá trị tiếp theo, chu trình sẽ bắt đầu lại. Quá trình này giữ cho dung lượng bộ nhớ nhỏ 3 cũng hoạt động một cách lười biếng, có nghĩa là bộ nhớ sẽ không thành vấn đề nếu bạn chọn sử dụng nó trong trường hợp này>>> 1Tùy thuộc vào việc bạn thích biểu thức trình tạo hay 3Hồ sơ để tối ưu hóa hiệu suấtVì vậy, cách tiếp cận nào nhanh hơn? . Nếu không, thì tốt nhất là chọn bất kỳ cách tiếp cận nào dẫn đến mã sạch nhất Nếu bạn đang ở trong một tình huống mà hiệu suất là quan trọng, thì tốt nhất bạn nên lập hồ sơ các cách tiếp cận khác nhau và lắng nghe dữ liệu. 80 là một thư viện hữu ích để xác định thời gian cần thiết để chạy các đoạn mã. Bạn có thể sử dụng 80 để so sánh thời gian chạy của các vòng lặp 3, 6 và khả năng hiểu danh sách>>> 2Tại đây, bạn xác định ba phương thức, mỗi phương thức sử dụng một cách tiếp cận khác nhau để tạo danh sách. Sau đó, bạn yêu cầu 80 chạy từng chức năng đó 100 lần mỗi chức năng. 80 trả về tổng thời gian cần thiết để chạy 100 lần thực thi đóNhư mã chứng minh, sự khác biệt lớn nhất là giữa cách tiếp cận dựa trên vòng lặp và 3, với vòng lặp mất nhiều thời gian hơn 50% để thực thi. Điều này có quan trọng hay không phụ thuộc vào nhu cầu của ứng dụng của bạnSự kết luậnTrong hướng dẫn này, bạn đã học cách sử dụng khả năng hiểu danh sách trong Python để hoàn thành các tác vụ phức tạp mà không làm cho mã của bạn trở nên quá phức tạp Bây giờ bạn có thể
Bất cứ khi nào bạn phải chọn một phương pháp tạo danh sách, hãy thử nhiều cách triển khai và cân nhắc cách triển khai nào dễ đọc và dễ hiểu nhất trong trường hợp cụ thể của bạn. Nếu hiệu suất là quan trọng, thì bạn có thể sử dụng các công cụ lập hồ sơ để cung cấp cho bạn dữ liệu có thể hành động thay vì dựa vào linh cảm hoặc phỏng đoán về những gì hoạt động tốt nhất Hãy nhớ rằng mặc dù khả năng hiểu danh sách Python được chú ý rất nhiều, nhưng trực giác và khả năng sử dụng dữ liệu của bạn khi cần thiết sẽ giúp bạn viết mã rõ ràng phục vụ cho nhiệm vụ sắp tới. Cuối cùng, đây là chìa khóa để tạo mã Pythonic của bạn Đánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Hiểu cách hiểu danh sách Python 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về James Timmins James là nhà tư vấn phần mềm và nhà phát triển Python. Khi anh ấy không viết Python, anh ấy thường viết về nó dưới dạng blog hoặc sách » Thông tin thêm về JamesMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Geir Arne Jaya Joanna Mike Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi |