Lấy cảm hứng từ câu trả lời tuyệt vời của @gnibbler [nhưng terse!], Chúng tôi có thể áp dụng phương pháp đó để bản đồ vào nhiều phân vùng:
from collections import defaultdict
def splitter[l, mapper]:
"""Split an iterable into multiple partitions generated by a callable mapper."""
results = defaultdict[list]
for x in l:
results[mapper[x]] += [x]
return results
Sau đó, splitter
sau đó có thể được sử dụng như sau:
>>> l = [1, 2, 3, 4, 2, 3, 4, 5, 6, 4, 3, 2, 3]
>>> split = splitter[l, lambda x: x % 2 == 0] # partition l into odds and evens
>>> split.items[]
>>> [[False, [1, 3, 3, 5, 3, 3]], [True, [2, 4, 2, 4, 6, 4, 2]]]
Điều này hoạt động cho hơn hai phân vùng với ánh xạ phức tạp hơn [và trên các trình lặp cũng vậy]:
>>> import math
>>> l = xrange[1, 23]
>>> split = splitter[l, lambda x: int[math.log10[x] * 5]]
>>> split.items[]
[[0, [1]],
[1, [2]],
[2, [3]],
[3, [4, 5, 6]],
[4, [7, 8, 9]],
[5, [10, 11, 12, 13, 14, 15]],
[6, [16, 17, 18, 19, 20, 21, 22]]]
Hoặc sử dụng từ điển để lập bản đồ:
>>> map = {'A': 1, 'X': 2, 'B': 3, 'Y': 1, 'C': 2, 'Z': 3}
>>> l = ['A', 'B', 'C', 'C', 'X', 'Y', 'Z', 'A', 'Z']
>>> split = splitter[l, map.get]
>>> split.items[]
[1, ['A', 'Y', 'A']], [2, ['C', 'C', 'X']], [3, ['B', 'Z', 'Z']]]
Chia danh sách dựa trên điều kiện trong Python #
Để phân chia danh sách dựa trên một điều kiện:
- Khai báo hai biến mới và khởi tạo chúng vào danh sách trống.
- Sử dụng vòng lặp
for
để lặp qua danh sách ban đầu. - Kiểm tra xem mỗi mục có đáp ứng một điều kiện không.
- Nối các mục đáp ứng điều kiện vào một danh sách và các mục không vào cái kia.
0 không.Copied!
my_list = [1, 21, 3, 7, 14, 28, 35] lte_10 = [] gte_10 = [] for item in my_list: if item >> l = [1, 2, 3, 4, 2, 3, 4, 5, 6, 4, 3, 2, 3] >>> split = splitter[l, lambda x: x % 2 == 0] # partition l into odds and evens >>> split.items[] >>> [[False, [1, 3, 3, 5, 3, 3]], [True, [2, 4, 2, 4, 6, 4, 2]]]
Nếu điều kiện được đáp ứng, chúng tôi nối các mục vào danh sách
>>> l = [1, 2, 3, 4, 2, 3, 4, 5, 6, 4, 3, 2, 3]
>>> split = splitter[l, lambda x: x % 2 == 0] # partition l into odds and evens
>>> split.items[]
>>> [[False, [1, 3, 3, 5, 3, 3]], [True, [2, 4, 2, 4, 6, 4, 2]]]
1, nếu không, chúng tôi nối các mục vào >>> l = [1, 2, 3, 4, 2, 3, 4, 5, 6, 4, 3, 2, 3]
>>> split = splitter[l, lambda x: x % 2 == 0] # partition l into odds and evens
>>> split.items[]
>>> [[False, [1, 3, 3, 5, 3, 3]], [True, [2, 4, 2, 4, 6, 4, 2]]]
2.Bạn cũng có thể sử dụng mệnh đề
>>> l = [1, 2, 3, 4, 2, 3, 4, 5, 6, 4, 3, 2, 3]
>>> split = splitter[l, lambda x: x % 2 == 0] # partition l into odds and evens
>>> split.items[]
>>> [[False, [1, 3, 3, 5, 3, 3]], [True, [2, 4, 2, 4, 6, 4, 2]]]
3 nếu bạn phải.3 kiểm tra xem mục hiện tại có lớn hơnCopied!
my_list = [1, 21, 3, 7, 14, 19, 28, 35] lte_10 = [] gte_10 = [] between_10_and_20 = [] for item in my_list: if item 10 and item >> l = [1, 2, 3, 4, 2, 3, 4, 5, 6, 4, 3, 2, 3] >>> split = splitter[l, lambda x: x % 2 == 0] # partition l into odds and evens >>> split.items[] >>> [[False, [1, 3, 3, 5, 3, 3]], [True, [2, 4, 2, 4, 6, 4, 2]]]
>>> l = [1, 2, 3, 4, 2, 3, 4, 5, 6, 4, 3, 2, 3]
>>> split = splitter[l, lambda x: x % 2 == 0] # partition l into odds and evens
>>> split.items[]
>>> [[False, [1, 3, 3, 5, 3, 3]], [True, [2, 4, 2, 4, 6, 4, 2]]]
0 và nhỏ hơn >>> l = [1, 2, 3, 4, 2, 3, 4, 5, 6, 4, 3, 2, 3]
>>> split = splitter[l, lambda x: x % 2 == 0] # partition l into odds and evens
>>> split.items[]
>>> [[False, [1, 3, 3, 5, 3, 3]], [True, [2, 4, 2, 4, 6, 4, 2]]]
6.Nếu điều kiện được đáp ứng, chúng tôi nối giá trị vào danh sách thứ ba.
Ngoài ra, bạn có thể sử dụng một danh sách hiểu.
Chia danh sách dựa trên một điều kiện bằng cách sử dụng danh sách hiểu #
Để phân chia danh sách dựa trên một điều kiện:
- Sử dụng danh sách hiểu để lặp lại trong danh sách.
- Kiểm tra xem mỗi mục có đáp ứng một điều kiện không.
- Danh sách mới sẽ chỉ chứa các mục đáp ứng điều kiện.
Copied!
my_list = [1, 21, 3, 7, 14, 19, 28, 35] lte_10 = [ item for item in my_list if item = 10 ] print[gte_10] # 👉️ [21, 14, 19, 28, 35]
Chúng tôi đã sử dụng hai danh sách toàn diện để lặp lại trong danh sách.
Danh sách các hệ thống được sử dụng để thực hiện một số hoạt động cho mọi yếu tố hoặc chọn một tập hợp con của các phần tử đáp ứng một điều kiện.
Trên mỗi lần lặp, chúng tôi kiểm tra xem một điều kiện có được đáp ứng và trả về mục khớp không.
Các danh sách mới chỉ chứa các yếu tố đáp ứng điều kiện.
Bạn có thể sử dụng phương pháp này để kiểm tra bất kỳ điều kiện.
Cách tiếp cận mà bạn chọn là một vấn đề sở thích cá nhân. Tôi sẽ sử dụng danh sách hiểu biết để kiểm tra các điều kiện đơn giản và vòng lặp for
để kiểm tra các điều kiện liên quan hơn khi chia danh sách.