2012-02-24 31 views
13

Trong python2 tôi có thể sử dụngSet của tất cả các tập con

def subsets(mySet): 
    return reduce(lambda z, x: z + [y + [x] for y in z], mySet, [[]]) 

để tìm tất cả các tập con của mySet. Python 3 đã xóa reduce.

Điều gì sẽ là viết lại ngắn gọn về điều này cho Python3?

+5

'reduce()' vẫn ở đó - nó đã được chuyển sang 'functools'. –

+1

@SvenMarnach: Ah, cảm ơn. Có một phiên bản không phải là 'reduce() '? – Randomblue

+6

Không hoàn toàn là một lớp lót, nhưng [tài liệu itertools] (http://docs.python.org/py3k/library/itertools.html) có triển khai thực hiện quyền hạn. – AdamKG

Trả lời

13

Dưới đây là một vài list thực hiện khác nhau của tập sức mạnh (tập hợp tất cả các tập con) thuật toán bằng Python. Một số là đệ quy, một số là lặp lại, một số trong số chúng không sử dụng reduce. Rất nhiều lựa chọn để lựa chọn!

5

Chức năng reduce() luôn có thể được tái tạo bởi vòng lặp for. Dưới đây là một việc thực hiện Python của reduce():

def reduce(function, iterable, start=None): 
    iterator = iter(iterable) 
    if start is None: 
     start = next(iterator) 
    for x in iterator: 
     start = function(start, x) 
    return start 

(. Ngược lại với phiên bản tích hợp trong Python của reduce(), phiên bản này không cho phép để vượt qua trong None như start tham số)

chuyên vỏ mã này với các thông số bạn truyền cho reduce() cho

def subsets(my_set): 
    result = [[]] 
    for x in my_set: 
     result = result + [y + [x] for y in result] 
    return result 
Các vấn đề liên quan