Khả năng hiểu danh sách Python chứa

Trên trang này. hiểu danh sách [f(x) for x in li if. ]

Lọc các mục trong danh sách

Giả sử chúng ta có một danh sách. Thông thường, chúng tôi chỉ muốn thu thập các mục đáp ứng các tiêu chí nhất định. Dưới đây, chúng tôi có một danh sách các từ và chúng tôi muốn trích xuất từ ​​đó chỉ những từ có chứa 'wo'. Đối với điều này, trước tiên chúng ta cần tạo một danh sách trống mới, sau đó lặp qua danh sách ban đầu để tìm các mục được đưa vào

>>> wood = 'How much wood would a woodchuck chuck if a woodchuck could
chuck wood?'.split()
>>> wood
['How', 'much', 'wood', 'would', 'a', 'woodchuck', 'chuck', 'if', 'a', 
'woodchuck', 'could', 'chuck', 'wood?'] 
>>> wolist = []
>>> for x in wood:
        if 'wo' in x:
            wolist.append(x)
>>> wolist
['wood', 'would', 'woodchuck', 'woodchuck', 'wood?'] 
>>> 

OK, nó hoạt động, nhưng đó là rất nhiều dòng mã. Điều gì sẽ xảy ra nếu tôi nói với bạn rằng bạn có thể hoàn thành tất cả chỉ với một dòng mã Python? . Kìa siêu năng lực của việc hiểu danh sách

>>> [x for x in wood if 'wo' in x]
['wood', 'would', 'woodchuck', 'woodchuck', 'wood?'] 
>>> 

Bạn muốn một danh sách các từ có hơn 5 ký tự?

>>> [x for x in wood if len(x) >= 5]
['would', 'woodchuck', 'chuck', 'woodchuck', 'could', 'chuck', 'wood?'] 
>>> 

Các từ có hơn 5 ký tự VÀ kết thúc bằng 'ck'

>>> [x for x in wood if len(x) >= 5 and x.endswith('ck')]
['woodchuck', 'chuck', 'woodchuck', 'chuck'] 
>>> 

Bạn có được ý tưởng. Về cơ bản, khả năng hiểu danh sách để lọc bắt đầu bằng [x cho x trong li], điều này thực tế tạo ra một danh sách mới giống hệt với li, sau đó xử lý nếu. mệnh đề ở cuối, hoạt động như tiêu chí lọc

Chuyển đổi các mục trong danh sách

Một loại nhiệm vụ phổ biến khác với danh sách là biến đổi từng mục. Ví dụ: giả sử tôi muốn tạo một danh sách mới trong đó mỗi từ 'o' được thay thế bằng 'oo' trong mỗi từ. Như trước đây, quy trình vòng lặp for thông thường hoàn thành công việc nhưng tẻ nhạt

>>> wood
['How', 'much', 'wood', 'would', 'a', 'woodchuck', 'chuck', 'if', 'a', 
'woodchuck', 'could', 'chuck', 'wood?'] 
>>> doubleo = []
>>> for x in wood:
        doubleo.append(x.replace('o', 'oo'))
>>> doubleo
['Hoow', 'much', 'wooood', 'woould', 'a', 'woooodchuck', 'chuck', 'if', 
'a', 'woooodchuck', 'coould', 'chuck', 'wooood?'] 
>>> 

Một lần nữa, với khả năng hiểu danh sách, tất cả những gì bạn cần là một dòng mã

>>> [x.replace('o', 'oo') for x in wood]
['Hoow', 'much', 'wooood', 'woould', 'a', 'woooodchuck', 'chuck', 'if', 
'a', 'woooodchuck', 'coould', 'chuck', 'wooood?'] 
>>> 

Một ví dụ khác -- viết hoa mỗi từ

>>> [x.capitalize() for x in wood]
['How', 'Much', 'Wood', 'Would', 'A', 'Woodchuck', 'Chuck', 'If', 'A', 
'Woodchuck', 'Could', 'Chuck', 'Wood?'] 
>>> 

Một danh sách độ dài từ, cho mỗi từ trong gỗ. Vì vậy, bạn có thể thấy điều này tiện dụng như thế nào. Cú pháp hoạt động như thế này. bắt đầu với [x for x in li], tạo ra một danh sách mới giống với li, x ban đầu được thay thế bằng f(x), một hàm nhất định với x là đầu vào. Kết quả là một danh sách mới trong đó mỗi x được chuyển đổi thành f(x)

Lọc và chuyển đổi, áp dụng cùng nhau

bạn có thể hỏi. chúng ta có thể lọc VÀ chuyển đổi cùng một lúc không? . Dưới đây, chúng tôi chỉ lọc những từ có 'wo' và sau đó viết hoa chúng

>>> [x.upper() for x in wood if 'wo' in x]
['WOOD', 'WOULD', 'WOODCHUCK', 'WOODCHUCK', 'WOOD?'] 
>>> 

Những gì chúng tôi có ở đây là cú pháp này. [f(x) cho x trong li nếu. ]. Đây là một ví dụ khác. Phép biến đổi f(x) có thể phức tạp hơn. Bên dưới, bạn đang lọc các từ dài hơn 5 ký tự và xuất các từ cũng như độ dài của chúng dưới dạng bộ dữ liệu. Trong sách NLTK, bạn sẽ thấy rất nhiều ví dụ về hiểu danh sách đang hoạt động, thực hiện các thao tác thú vị trên danh sách khổng lồ các từ và dữ liệu ngôn ngữ khác. Bạn nên cảm thấy thoải mái với việc hiểu danh sách. nó sẽ tăng tốc quá trình xử lý văn bản của bạn

Ví dụ 4. Bây giờ, hãy tạo một danh sách mới chứa các chữ cái đầu tiên của mọi phần tử trong danh sách đã tồn tại

________số 8_______

đầu ra

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
0

Liệt kê mức độ hiểu Python so với vòng lặp For trong Python

Bất cứ khi nào chúng ta muốn lặp lại một khối mã với số lần cố định, cách đầu tiên để thực hiện là sử dụng “vòng lặp for. ” Khả năng hiểu danh sách cũng có khả năng làm điều tương tự và điều đó cũng có cách tiếp cận tốt hơn so với các vòng lặp for vì khả năng hiểu danh sách nhỏ gọn hơn. Do đó, nó cung cấp một giải pháp thay thế rất tốt cho các vòng lặp
Hãy lấy một ví dụ ở đây. Giả sử, chúng tôi muốn tách các chữ cái của một từ và tạo một danh sách chứa các chữ cái đó

Khối mã tương tự trong trường hợp sử dụng vòng lặp for sẽ là

chữ cái = []
cho chữ cái trong 'Intellipaat'
bức thư. nối thêm (thư)
in (chữ cái)

đầu ra

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
1

Chúng tôi có thể thu được kết quả tương tự bằng cách sử dụng Tính năng hiểu danh sách với số lượng dòng mã ít hơn như được hiển thị bên dưới

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
2

đầu ra

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
1

Trong khi sử dụng khả năng hiểu danh sách Python, chúng tôi không nhất thiết phải có một danh sách để tạo một danh sách khác. Chúng ta cũng có thể sử dụng các chuỗi và khả năng hiểu danh sách sẽ xác định nó dưới dạng một chuỗi và xử lý nó dưới dạng một danh sách. Trong ví dụ trên về khối mã hiểu danh sách, Intellipaat là một chuỗi, không phải danh sách

Become a Full Stack Web Developer

Liệt kê mức độ hiểu Python Vs. Hàm Lambda trong Python

Trong Python, chúng tôi cũng sử dụng các hàm Lambda để sửa đổi và thao tác với danh sách. Hàm lambda còn được gọi là hàm ẩn danh. Hàm lambda thường được sử dụng với nhiều hàm tích hợp khác nhau, chẳng hạn như map() filter() và reduce() để hoạt động trên danh sách

Bản đồ () với Hàm Lambda

Trước tiên hãy xem cách chúng tôi sử dụng map() với hàm Lambda để làm việc trên danh sách

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
4

Trong đoạn mã trên, chúng tôi đã sử dụng map() với lambda để tạo danh sách chứa các chữ cái của chuỗi “intellipaat” được phân tách bằng dấu phẩy. Tên của danh sách là các chữ cái
đầu ra

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
5

Chúng ta có thể thu được kết quả tương tự bằng cách sử dụng Danh sách hiểu Python. Các mã hiểu cũng dễ đọc hơn và dễ hiểu hơn
Làm theo các bước sau để viết mã hiểu Danh sách Python tương đương

  • Sau khi đặt tên cho danh sách mới, hãy bắt đầu với dấu ngoặc vuông
  • Bao gồm tên biến mà chúng tôi sẽ sử dụng để lặp qua các thành phần của danh sách cũ hoặc, trong trường hợp của chúng tôi, chuỗi
  • Thêm mệnh đề for để lặp lại phần tử trình tự, tức là biến của chúng ta
  • Chỉ định nơi biến đến từ. Thêm từ khóa in theo sau là trình tự từ đó chúng ta sẽ nhận được biến của mình. Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng chuỗi Intellipaat để chuyển đổi các phần tử của danh sách mới của chúng tôi

Vì vậy, mã cuối cùng sử dụng Python List Comprehension trông như thế này

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
6

đầu ra

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
5

Bạn muốn có kiến ​​thức chuyên sâu về trăn?

Bộ lọc () với Hàm Lambda

Bây giờ chúng ta đã biết cách sử dụng khả năng hiểu danh sách Python như một giải pháp thay thế cho hàm map() kết hợp với lambda, giờ hãy xem cách chúng ta có thể sử dụng khả năng hiểu danh sách Python như một giải pháp thay thế cho hàm filter()

Chúng tôi đã sử dụng bộ lọc () với lambda để lọc các giá trị lẻ khỏi danh sách hiện có và lưu các giá trị đã lọc vào danh sách mới trong khối mã sau

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
8

đầu ra

new_list = []
for i in old_list:
if filter(i):
new_list.append(expressions(i))
9

Có thể thu được kết quả tương tự bằng cách sử dụng Python List Comprehension như hình bên dưới

new_list = [expression(i) for i in old_list if filter(i)]
0

đầu ra

new_list = [expression(i) for i in old_list if filter(i)]
1

Giảm () với Hàm Lambda

Như đã đề cập ở trên, chúng ta cũng có thể viết mã hàm lambda bằng hàm reduce() để làm cho mã ngắn và hiệu quả hơn bằng cách sử dụng khả năng hiểu danh sách của Python
Khối mã sau đây là một ví dụ về reduce() với lambda

new_list = [expression(i) for i in old_list if filter(i)]
2

Ghi chú. Gần đây, mô-đun giảm đã được chuyển sang gói funcools, vì vậy nếu chúng tôi đang sử dụng Python 3, thì chúng tôi sẽ phải nhập mô-đun giảm từ funcools như được hiển thị trong khối mã ở trên
Danh sách kết quả chứa tổng của tất cả các thành phần của danh sách, list1
đầu ra

new_list = [expression(i) for i in old_list if filter(i)]
3

Có thể thu được kết quả tương tự bằng cách sử dụng khả năng hiểu danh sách Python như hình bên dưới
Ghi chú. Việc hiểu danh sách Python chỉ hoạt động với một biến, vì vậy việc sử dụng Y ở đây không được phép. Do đó, để thực hiện công việc trên, chúng ta có thể sử dụng một hàm tổng hợp, chẳng hạn như sum()

new_list = [expression(i) for i in old_list if filter(i)]
4

đầu ra

new_list = [expression(i) for i in old_list if filter(i)]
3

Ghi chú. Ở đây, chúng tôi không phải nhập mô-đun giảm, vì chúng tôi đã thay thế nó bằng hiểu danh sách Python

Learn new Technologies

Các điều kiện trong việc hiểu danh sách Python

Chúng ta cũng có thể sử dụng các câu điều kiện trong phần hiểu danh sách để sửa đổi và thao tác với danh sách. Hãy tìm hiểu cách thực hiện điều đó với sự trợ giúp của một số ví dụ. Ở đây, chúng ta sẽ sử dụng một hàm toán học range() xác định phạm vi mà chúng ta muốn sử dụng trong các ví dụ của mình. Nó nhận một số nguyên làm tham số và phạm vi bắt đầu từ 0 đến số một nhỏ hơn tham số được cung cấp. Ví dụ: phạm vi (20) sẽ xem xét phạm vi số từ 0 đến

ví dụ

1. Sử dụng câu lệnh if trong Python Hiểu danh sách

new_list = [expression(i) for i in old_list if filter(i)]
6

đầu ra

new_list = [expression(i) for i in old_list if filter(i)]
7

2. Sử dụng IF lồng nhau với khả năng hiểu danh sách Python

new_list = [expression(i) for i in old_list if filter(i)]
8

đầu ra

new_list = [expression(i) for i in old_list if filter(i)]
9

Trong ví dụ trên, điều kiện đầu tiên mà tính năng hiểu danh sách kiểm tra là x có chia hết cho 2 không, sau đó nếu điều kiện được đáp ứng, nó sẽ gặp câu lệnh điều kiện khác và kiểm tra xem x được tìm thấy là chia hết cho 2 cũng chia hết cho 2
Nếu cả hai điều kiện được đáp ứng, chỉ khi đó x mới được thêm vào danh sách new_list

3. Sử dụng câu lệnh if-else với khả năng hiểu Danh sách Python

x = [i for i in range(15)]
print (x)
0

đầu ra

x = [i for i in range(15)]
print (x)
1

Trong ví dụ trên, việc hiểu danh sách kiểm tra tất cả các số bắt đầu từ 0 đến 9. Nếu tìm thấy x chia hết cho 2, 'x là số chẵn' (trong đó x là số tương ứng) được thêm vào danh sách chẵn_lẻ. Nếu điều kiện không được đáp ứng, thì câu lệnh khác được thực thi và 'x là số lẻ' (trong đó x là số tương ứng) được thêm vào danh sách chẵn_lẻ

Danh sách lồng nhau trong hiểu danh sách Python

Bất cứ khi nào chúng ta nói về danh sách lồng nhau, phương pháp đầu tiên để triển khai danh sách lồng nhau xuất hiện trong đầu chúng ta là sử dụng vòng lặp lồng nhau. Như chúng ta đã thấy rằng khả năng hiểu danh sách Python có thể được sử dụng thay thế cho các vòng lặp, rõ ràng nó cũng có thể được sử dụng cho các vòng lặp lồng nhau. Hãy xem cách thực hiện với sự trợ giúp của một ví dụ
Giả sử, chúng tôi muốn hiển thị bảng nhân của 4, 5 và 6. Bây giờ sử dụng các vòng lặp lồng nhau thông thường, chúng ta sẽ viết khối mã sau để thực hiện tương tự

x = [i for i in range(15)]
print (x)
2

Đầu ra sẽ là

x = [i for i in range(15)]
print (x)
3

Chúng ta có thể thu được kết quả tương tự bằng cách sử dụng khả năng hiểu danh sách Python và khối mã được sử dụng sẽ là

bảng = [[x*y cho y trong phạm vi (1,11)] cho x trong phạm vi (4,7)]
in (bảng)

đầu ra

x = [i for i in range(15)]
print (x)
4

Trong ví dụ trên, chúng tôi đã sử dụng 'vòng lặp for' cho y làm cách hiểu bên trong

Chìa khóa rút ra

  • Hiểu danh sách Python là một cách rất ngắn gọn và thanh lịch để xác định và tạo danh sách dựa trên danh sách hiện có
  • Khi nói đến việc tạo danh sách, khả năng hiểu danh sách Python nhanh hơn và thân thiện với người dùng hơn so với vòng lặp và hàm lambda. Tốc độ và khả năng đọc là những gì làm cho việc hiểu danh sách Python trở thành một giải pháp thay thế thuận lợi cho các vòng lặp và hàm lambda. Nắm vững cách hiểu này có thể làm cho mã của chúng ta hiệu quả hơn, nhanh hơn và ngắn hơn. Mặc dù chúng tôi đã đề cập đến tất cả các chủ đề chính, cùng với các ví dụ, nhưng vẫn còn nhiều điều để tìm hiểu về Python. Bạn muốn có được kiến ​​thức chuyên sâu và tài liệu nghiên cứu cập nhật? . Khóa học này sẽ giúp tôi thành thạo tất cả các mô-đun và gói chính trong Python, thư viện quét web, hàm lambda, v.v. Thông qua khóa học này, hãy tìm hiểu cách viết mã Python cho các hệ thống Dữ liệu lớn, chẳng hạn như Hadoop và nhận nhiều bài tập thực hành để thực hành và thành thạo Python

    Làm cách nào để kiểm tra xem một danh sách có chứa một chuỗi cụ thể trong Python không?

    Python Tìm Chuỗi trong Danh sách bằng cách sử dụng count() Chúng ta cũng có thể sử dụng hàm count() để lấy số lần xuất hiện của một chuỗi trong . Nếu đầu ra của nó là 0, thì điều đó có nghĩa là chuỗi đó không có trong danh sách.

    Tất cả cách hiểu danh sách trong Python là gì?

    Mọi khả năng hiểu danh sách trong Python bao gồm ba yếu tố. biểu thức là chính thành viên, lệnh gọi phương thức hoặc bất kỳ biểu thức hợp lệ nào khác trả về giá trị . Trong ví dụ trên, biểu thức i * i là bình phương của giá trị phần tử. thành viên là đối tượng hoặc giá trị trong danh sách hoặc có thể lặp lại.

    Việc hiểu danh sách trả về là gì?

    Giá trị trả về là một danh sách mới, giữ nguyên danh sách cũ. .
    Điều kiện. Điều kiện giống như một bộ lọc chỉ chấp nhận các mục có giá trị là True. .
    Có thể lặp lại. Có thể lặp lại có thể là bất kỳ đối tượng có thể lặp lại nào, như danh sách, bộ dữ liệu, bộ, v.v. .
    Sự diễn đạt