Python lấy tập hợp con của danh sách dựa trên điều kiện

Trong ví dụ này, chúng ta sẽ thảo luận về 4 cách khác nhau để đếm số phần tử trong một danh sách thỏa mãn các điều kiện nhất định

Giả sử chúng ta có một danh sách các số i. e

# List of numbers
listOfElems = [11, 22, 33, 45, 66, 77, 88, 99, 101]

Chúng tôi muốn đếm số phần tử trong danh sách thỏa mãn các điều kiện đã cho của chúng tôi. Những điều kiện này có thể giống như,
  • Số phải là Lẻ i. e. x % 2 == 1
  • Số phải là Chẵn i. e. x % 2 == 0
  • Số phải lớn hơn năm i. e. x > 5
  • Số phải lớn hơn năm và nhỏ hơn hai mươi i. e. x > 5 và x < 20

Có nhiều cách khác nhau để làm điều đó. Hãy thảo luận từng cái một,

Sử dụng map[] & sum[] để đếm các phần tử trong danh sách thỏa mãn một số điều kiện

hàm map[]

map[function, iterable, ...]

Hàm map[] trong python chấp nhận một hàm và một danh sách giống như có thể lặp lại. Sau đó, áp dụng hàm đã cho cho từng phần tử trong danh sách và nối kết quả của hàm vào danh sách mới. Cuối cùng map[] trả về danh sách mới này tôi. e. danh sách kết quả.

Hàm tổng []

sum[iterable, start=0]

sum[] cộng các mục trong một lần lặp đã cho.

Hãy sử dụng cả hai hàm này để đếm các phần tử trong danh sách theo điều kiện

Đếm số lẻ trong danh sách

Giải pháp dòng đơn là,

listOfElems = [11, 22, 33, 45, 66, 77, 88, 99, 101]

# Count odd numbers in the list
count = sum[map[lambda x : x%2 == 1, listOfElems]]

print['Count of odd numbers in a list : ', count]

Đầu ra.
______4
Nó hoạt động như thế nào?

Hãy phá vỡ giải pháp trên theo từng bước nhỏ để hiểu cách thức hoạt động của nó

Trong trường hợp này, điều kiện của chúng ta là số đó phải là số lẻ. Vì vậy, hãy tạo một hàm lambda để kiểm tra điều kiện này. e

lambda x : x%2 == 1

Bây giờ hãy chuyển điều kiện / hàm lambda của chúng ta tới map[] và lấy đối tượng bản đồ là kết quả i. e.
______6
Hàm lambda đã cho được áp dụng cho từng phần tử trong danh sách và kết quả được lưu trữ trong đối tượng bản đồ. Vì hàm lambda của chúng tôi trả về một bool, nên đối tượng bản đồ chứa các phần tử bool. Chúng ta có thể kiểm tra kết quả bằng cách in nội dung đối tượng bản đồ i. e.
print['Contents of map object : ', list[mapObj]]

Đầu ra.
______8
Số True trong danh sách bool này đại diện cho số phần tử lẻ trong danh sách. Hãy đếm số lần xuất hiện của True trong đối tượng bản đồ này bằng cách sử dụng hàm sum[] i. e.
# Add number of True / 1 in the map object of bools 
count = sum[mapObj]

Đây là cách chúng tôi tìm thấy số phần tử trong danh sách thỏa mãn một điều kiện nhất định.

Hãy xem thêm một số ví dụ để đếm các phần tử trong danh sách dựa trên điều kiện sử dụng sum[] & map[]

Đếm số chẵn trong danh sách

map[function, iterable, ...]
0
Đầu ra.
______11

Đếm số trong danh sách lớn hơn 5

map[function, iterable, ...]
2
Đầu ra.
______13

Sử dụng biểu thức sum[] & Generator để đếm các phần tử trong danh sách dựa trên các điều kiện

Hãy tạo một hàm sử dụng sum[] & Biểu thức trình tạo để đếm số phần tử trong danh sách thỏa mãn điều kiện đã cho của chúng tôi i. e

map[function, iterable, ...]
4
Hàm này chấp nhận danh sách và hàm gọi lại làm đối số. Chức năng gọi lại sẽ là chức năng của chúng tôi kiểm tra điều kiện. Hàm này gọi hàm gọi lại đã cho trên từng phần tử trong danh sách và trả về số lượng phần tử trong danh sách trả về True khi được chuyển đến điều kiện của chúng tôi i. e. gọi lại.

Hãy sử dụng chức năng này để đếm số phần tử trong danh sách thỏa mãn điều kiện của chúng tôi,

Đếm số trong danh sách lớn hơn 5

map[function, iterable, ...]
5
Đầu ra.
______13

Đếm các số trong danh sách lớn hơn 5 nhưng nhỏ hơn 20

map[function, iterable, ...]
7
Đầu ra.
______18
Nếu không truyền hàm gọi lại thì hàm này sẽ trả về tổng số phần tử trong danh sách i. e.

Đếm tổng số phần tử trong danh sách

map[function, iterable, ...]
9
Đầu ra
sum[iterable, start=0]
0

Sử dụng len[] & Khả năng hiểu danh sách để đếm các phần tử trong danh sách dựa trên các điều kiện

Chúng ta có thể sử dụng khả năng hiểu danh sách để tạo một danh sách mới gồm các phần tử thỏa mãn điều kiện đã cho và sau đó lấy độ dài của danh sách mới này để tìm ra số phần tử trong danh sách ban đầu thỏa mãn điều kiện của chúng ta. e

Phương thức

Count of odd numbers in a list :  6
2 không trả về giá trị đã bị xóa mà chỉ trả về
sum[iterable, start=0]
15, nghĩa là không có giá trị trả về

Nếu bạn cần xóa một mục theo số chỉ mục của nó và/hoặc vì lý do nào đó mà bạn muốn trả lại [lưu] giá trị mà bạn đã xóa, hãy sử dụng phương thức

sum[iterable, start=0]
16 để thay thế

Cách xóa phần tử khỏi danh sách bằng phương thức
Count of odd numbers in a list :  6
2 trong Python

Để xóa một phần tử khỏi danh sách bằng phương thức

Count of odd numbers in a list :  6
2, hãy chỉ định giá trị của phần tử đó và chuyển nó làm đối số cho phương thức

Count of odd numbers in a list :  6
2 sẽ tìm kiếm danh sách để tìm và xóa nó

sum[iterable, start=0]
3

Nếu bạn chỉ định một giá trị không có trong danh sách, thì bạn sẽ gặp lỗi – cụ thể lỗi sẽ là

sum[iterable, start=0]
40

sum[iterable, start=0]
1

Để tránh lỗi này xảy ra, trước tiên bạn có thể kiểm tra xem giá trị bạn muốn xóa có nằm trong danh sách ban đầu hay không bằng cách sử dụng từ khóa

sum[iterable, start=0]
41

Nó sẽ trả về một giá trị Boolean –

sum[iterable, start=0]
42 nếu mục có trong danh sách hoặc
sum[iterable, start=0]
43 nếu giá trị không có trong danh sách

sum[iterable, start=0]
4

Một cách khác để tránh lỗi này là tạo một điều kiện có nội dung cơ bản là "Nếu giá trị này là một phần của danh sách thì hãy xóa nó. Nếu nó không tồn tại, thì hiển thị thông báo cho biết nó không có trong danh sách"

listOfElems = [11, 22, 33, 45, 66, 77, 88, 99, 101]

# Count odd numbers in the list
count = sum[map[lambda x : x%2 == 1, listOfElems]]

print['Count of odd numbers in a list : ', count]
0

Bây giờ, thay vì gặp lỗi Python khi bạn đang cố xóa một giá trị nhất định không tồn tại, bạn sẽ nhận được thông báo trả về cho biết mục bạn muốn xóa không có trong danh sách bạn đang làm việc.

Phương pháp
Count of odd numbers in a list :  6
2 Loại bỏ sự xuất hiện đầu tiên của một mục trong danh sách

Một điều cần lưu ý khi sử dụng phương pháp

Count of odd numbers in a list :  6
2 là nó sẽ tìm kiếm và sẽ chỉ loại bỏ phiên bản đầu tiên của một mục

Điều này có nghĩa là nếu trong danh sách có nhiều hơn một phiên bản của mục có giá trị mà bạn đã chuyển làm đối số cho phương thức, thì chỉ lần xuất hiện đầu tiên sẽ bị xóa

Hãy xem ví dụ sau

listOfElems = [11, 22, 33, 45, 66, 77, 88, 99, 101]

# Count odd numbers in the list
count = sum[map[lambda x : x%2 == 1, listOfElems]]

print['Count of odd numbers in a list : ', count]
1

Trong ví dụ trên, mục có giá trị

sum[iterable, start=0]
46 xuất hiện ba lần trong danh sách

Khi sử dụng

Count of odd numbers in a list :  6
2, chỉ phiên bản khớp đầu tiên bị xóa - phiên bản theo sau giá trị
sum[iterable, start=0]
48 và đứng trước giá trị
sum[iterable, start=0]
49

Hai lần xuất hiện khác của

sum[iterable, start=0]
46 vẫn còn trong danh sách

Điều gì sẽ xảy ra khi bạn muốn xóa tất cả các lần xuất hiện của một mục?

Chỉ sử dụng

Count of odd numbers in a list :  6
2 không thực hiện được điều đó và bạn có thể không muốn xóa phiên bản đầu tiên của mục bạn đã chỉ định

Cách xóa tất cả các trường hợp của một mục trong danh sách bằng Python

Một trong những cách để loại bỏ tất cả các lần xuất hiện của một mục trong danh sách là sử dụng khả năng hiểu danh sách

Khả năng hiểu danh sách tạo danh sách mới từ danh sách hiện có hoặc tạo danh sách phụ

Thao tác này sẽ không sửa đổi danh sách ban đầu của bạn mà thay vào đó sẽ tạo một danh sách mới thỏa mãn điều kiện bạn đặt

listOfElems = [11, 22, 33, 45, 66, 77, 88, 99, 101]

# Count odd numbers in the list
count = sum[map[lambda x : x%2 == 1, listOfElems]]

print['Count of odd numbers in a list : ', count]
6

Trong ví dụ trên, có danh sách

listOfElems = [11, 22, 33, 45, 66, 77, 88, 99, 101]

# Count odd numbers in the list
count = sum[map[lambda x : x%2 == 1, listOfElems]]

print['Count of odd numbers in a list : ', count]
02 ban đầu

Sau đó, một danh sách mới [hoặc danh sách con] được trả về

Các mục chứa trong danh sách con phải đáp ứng một điều kiện. Điều kiện là nếu một mục trong danh sách ban đầu có giá trị là

sum[iterable, start=0]
46, thì nó sẽ không thuộc danh sách phụ

Bây giờ, nếu bạn không muốn tạo danh sách mới mà thay vào đó muốn sửa đổi tại chỗ danh sách đã tồn tại, thì hãy sử dụng phép gán lát cắt kết hợp với khả năng hiểu danh sách

Với phép gán lát, bạn có thể sửa đổi và thay thế một số phần [hoặc lát] nhất định của danh sách

Để thay thế toàn bộ danh sách, hãy sử dụng cú pháp cắt lát

listOfElems = [11, 22, 33, 45, 66, 77, 88, 99, 101]

# Count odd numbers in the list
count = sum[map[lambda x : x%2 == 1, listOfElems]]

print['Count of odd numbers in a list : ', count]
04, cùng với khả năng hiểu danh sách

Khả năng hiểu danh sách đặt điều kiện rằng bất kỳ mục nào có giá trị

sum[iterable, start=0]
46 sẽ không còn là một phần của danh sách

Count of odd numbers in a list :  6
1

Phần kết luận

Và bạn có nó rồi đấy. Bây giờ bạn đã biết cách xóa một mục danh sách trong Python bằng phương pháp

Count of odd numbers in a list :  6
2. Bạn cũng đã thấy một số cách loại bỏ tất cả các lần xuất hiện của một mục trong danh sách bằng Python

Tôi hy vọng bạn tìm thấy bài viết này hữu ích

Để tìm hiểu thêm về ngôn ngữ lập trình Python, hãy xem Chứng chỉ máy tính khoa học với Python của freeCodeCamp

Bạn sẽ bắt đầu từ những điều cơ bản và học theo cách tương tác và thân thiện với người mới bắt đầu. Cuối cùng, bạn cũng sẽ xây dựng năm dự án để đưa vào thực tế và giúp củng cố những gì bạn đã học

Cảm ơn vì đã đọc và viết mã vui vẻ 😊

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

Dionysia Lemonaki

Học một cái gì đó mới mỗi ngày và viết về nó

Nếu bài viết này hữu ích, hãy tweet nó

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Chủ Đề