【面试】python测开经典面试题之列表元素组合

打印[1,2,3,4,5]这个列表中所有可能的组合(包括空组合)

1 个赞
    def calcuDif(list_a):
        #list_a = [1,2,3,4,5]
        list_b = [[]]
        for i in range(len(list_a)):
            for j in range(len(list_b)):
                list_b.append(list_b[j]+[list_a[i]])
        return list_b
    list_a = [1,2,3,4,5]
    newset = calcuDif(list_a)
    print(newset,len(newset))

可以使用mark自带的代码格式

def calcuDif(list_a):
    #list_a = [1,2,3,4,5]
    list_b = [[]]
    for i in range(len(list_a)):
        for j in range(len(list_b)):
            list_b.append(list_b[j]+[list_a[i]])
    return list_b
list_a = [1,2,3,4,5]
newset = calcuDif(list_a)
print(len(newset))

感觉python语言肯定有人造好了轮子(做了类似的功能),搜了一下果然,自带的库intertools中就有一个combinations方法可以简单处理这类问题

from itertools import combinations


def get_combinations(input_list):
    result = []
    for i in range(len(input_list) + 1):
        result.extend(list(combinations(input_list, i)))
    return result


a = [1, 2, 3, 4, 5]
print(get_combinations(a))

1 个赞