Hướng dẫn how do i partition an array in python? - làm cách nào để phân vùng một mảng trong python?

1

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Có thể trùng lặp: Python tương đương với bộ lọc () Nhận hai danh sách đầu ra (nghĩa là phân vùng của một danh sách)
python equivalent of filter() getting two output lists (i.e. partition of a list)

Tôi có một mảng trong Python và muốn chia nó thành hai mảng, một trong đó các yếu tố khớp với một vị ngữ và một trong đó các yếu tố không có.

Có một cách đơn giản hơn (hoặc nhiều pythonic) so với những điều sau:

>>> def partition(a, pred):
...   ain = []
...   aout = []
...   for x in a:
...     if pred(x):
...       ain.append(x)
...     else:
...       aout.append(x)
...   return (ain, aout)
...
>>> partition(range(1,10), lambda x: x%3 == 1)
([1, 4, 7], [2, 3, 5, 6, 8, 9])

Khi được hỏi ngày 29 tháng 8 năm 2012 lúc 23:59Aug 29, 2012 at 23:59

Hướng dẫn how do i partition an array in python? - làm cách nào để phân vùng một mảng trong python?

1

Những gì bạn hiện có đơn giản và hiệu quả hơn bất kỳ cách nào khác để làm điều này.

Dưới đây là một vài tùy chọn tiềm năng về cách bạn có thể viết lại mã này và tại sao tôi nghĩ phiên bản của bạn tốt hơn:

  • Sử dụng các bộ - thứ tự không được bảo tồn, chỉ hoạt động trên nội dung bămorder isn't preserved, only works on hashable contents
  • Sử dụng tee/filter/ifilterfalse - Tùy thuộc vào cách bạn sử dụng kết quả, cuối cùng bạn sử dụng nhiều bộ nhớ hơn và lặp lại hai lầndepending on how you use the result, you end up using more memory, and iterating twice
  • Sử dụng Numpy - Không áp dụng cho các phép lặp chung, cần lặp lại hai lần để có kết quả cho cả hai điều kiệnnot applicable to generic iterables, need to iterate twice to get results for both conditions

Đã trả lời ngày 30 tháng 8 năm 2012 lúc 0:13Aug 30, 2012 at 0:13

Andrew Clarkandrew ClarkAndrew Clark

196K33 Huy hiệu vàng265 Huy hiệu bạc297 Huy hiệu Đồng33 gold badges265 silver badges297 bronze badges

def partition(a,pred):
  f1 = set(filter(pred,a))
  f2 = set(a) - f1
  return f1,f2

nhiều pythonic hơn ... nhưng không chắc nó có nhanh hơn không

[Chỉnh sửa] Và tôi không nghĩ đặt hàng được bảo tồn ... (và có câu trả lời tốt hơn trong cả hai bình luận với liên kết)

Đã trả lời ngày 30 tháng 8 năm 2012 lúc 0:05Aug 30, 2012 at 0:05

Joran Beasleyjoran BeasleyJoran Beasley

106K12 Huy hiệu vàng148 Huy hiệu bạc174 Huy hiệu đồng12 gold badges148 silver badges174 bronze badges

Chỉ là một cách khác để nói điều tương tự. Lưu ý rằng thứ tự của hai danh sách được đảo ngược.

def partition(a, pred):
    aout_ain = [], []
    for x in a:
        aout_ain[pred(x)].append(x)
    return aout_ain

Nếu bạn cần "Ins" là đầu tiên thì chỉ cần thêm not

def partition(a, pred):
    ain_aout = [], []
    for x in a:
        ain_aout[not pred(x)].append(x)
    return ain_aout

Đã trả lời ngày 30 tháng 8 năm 2012 lúc 0:42Aug 30, 2012 at 0:42

Hướng dẫn how do i partition an array in python? - làm cách nào để phân vùng một mảng trong python?

John La Rooyjohn La RooyJohn La Rooy

286K51 Huy hiệu vàng359 Huy hiệu bạc499 Huy hiệu đồng51 gold badges359 silver badges499 bronze badges

Bạn có quyền truy cập vào Numpy không? Khả năng lập chỉ mục của Numpy giúp việc chọn các mục của một ndarray không dễ dàng tùy thuộc vào một số điều kiện. Ví dụ

>>> import numpy as np
>>> a = np.arange(1, 10)
>>> condition = (a % 3 == 1)
>>> a[condition]
array([1, 4, 7])
>>> a[~condition]
array([2, 3, 5, 6, 8, 9])

Numpy đặc biệt hiệu quả với các mảng lớn. Đối với những người nhỏ, không nhiều.

Đã trả lời ngày 30 tháng 8 năm 2012 lúc 0:06Aug 30, 2012 at 0:06

Pierre Gmpierre GMPierre GM

19.1k3 Huy hiệu vàng54 Huy hiệu bạc65 Huy hiệu Đồng3 gold badges54 silver badges65 bronze badges

Từ http://docs.python.org/dev/l Library/itertools.html#itertools-cipes

def partition(pred, iterable):
    'Use a predicate to partition entries into false entries and true entries'
    # partition(is_odd, range(10)) --> 0 2 4 6 8   and  1 3 5 7 9
    t1, t2 = tee(iterable)
    return ifilterfalse(pred, t1), filter(pred, t2)

Hướng dẫn how do i partition an array in python? - làm cách nào để phân vùng một mảng trong python?

Dharman ♦

28.1K21 Huy hiệu vàng75 Huy hiệu bạc127 Huy hiệu đồng21 gold badges75 silver badges127 bronze badges

Đã trả lời ngày 30 tháng 8 năm 2012 lúc 0:07Aug 30, 2012 at 0:07

Hướng dẫn how do i partition an array in python? - làm cách nào để phân vùng một mảng trong python?

Thikonomthikonomthikonom

4.1393 Huy hiệu vàng26 Huy hiệu bạc 30 Huy hiệu Đồng3 gold badges26 silver badges30 bronze badges

0

Không quá Pythonic, mà là một chút chức năng:

>>> partition = lambda xs, p: reduce(lambda (a, b), c: p(c) and (a + [c], b) or (a, b + [c]), xs, ([], []))
>>> print partition(range(1, 10), lambda x: x % 3 == 1)
([1, 4, 7], [2, 3, 5, 6, 8, 9])

Đã trả lời ngày 30 tháng 8 năm 2012 lúc 0:23Aug 30, 2012 at 0:23

Fedor Gogolevfedor GogolevFedor Gogolev

10.2k3 Huy hiệu vàng29 Huy hiệu bạc36 Huy hiệu đồng3 gold badges29 silver badges36 bronze badges

Làm cách nào để phân vùng một mảng?

Ba chiều phân vùng của một mảng xung quanh một phạm vi nhất định ..
Sắp xếp lại một mảng ở dạng tối thiểu tối đa | Hiệp 1..
Sắp xếp lại một mảng sao cho 'mảng [j]' trở thành 'i' if 'arr [i]' là 'j' | Hiệp 1..
Sắp xếp lại một mảng ở dạng tối thiểu tối đa | Đặt 2 (O (1) không gian thêm).
Tìm số cặp (x, y) trong một mảng sao cho x^y> y^x ..

Làm thế nào để tôi phân vùng trong Python?

Phương thức phân vùng chuỗi python () Phương thức Phương thức () tìm kiếm cho một chuỗi được chỉ định và chia chuỗi thành một bộ chứa ba phần tử. Phần tử đầu tiên chứa phần trước chuỗi được chỉ định. Phần tử thứ hai chứa chuỗi được chỉ định. Phần tử thứ ba chứa phần sau chuỗi.The partition() method searches for a specified string, and splits the string into a tuple containing three elements. The first element contains the part before the specified string. The second element contains the specified string. The third element contains the part after the string.

Làm thế nào để bạn phân vùng một danh sách trong Python?

Sau đây là các cách khác nhau để phân vùng danh sách thành các khối có độ dài bằng nhau trong Python:..
Sử dụng cắt lát.Một giải pháp đơn giản là viết một trình tạo mang lại các khối liên tiếp có kích thước được chỉ định từ danh sách.....
Sử dụng danh sách hiểu.Ngoài ra, bạn có thể sử dụng danh sách hiểu.....
Sử dụng mô -đun itertools.....
Sử dụng Toolz ..

Phân vùng một mảng có nghĩa là gì?

Định nghĩa: (1) Một phân chia của một tập hợp thành các bộ phân tách không trống hoàn toàn bao gồm tập hợp..A division of a set into nonempty disjoint sets that completely cover the set. (2) To rearrange the elements of an array into two (or more) groups, typically, such that elements in the first group are less than a value and elements in the second group are greater.