首页 > 编程语言 > 详细

itertools模块、排列、组合、算法

时间:2019-12-16 16:02:05      阅读:90      评论:0      收藏:0      [点我收藏+]

关于列表重组的python小题

题目一:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

              说明:解集不能包含重复的子集

示例:输入: nums = [1,2,3]

        输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]

 

def subsets(nums):
    """
    :type nums: List[int]
    :rtype: List[List[int]]
    """
    res=[[]] # 定义一个二维的空列表
    for i in nums:
        res=res+[[i]+num for num in res] # 不断的向子列表追加新元素,形成一个新列表,然后和原有的列表拼接起来
    return res

print("[1,2,3]",subsets([1,2,3]))

 

题目2:给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:输入:  [1,2,3]

         输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

# 方法1
import itertools #引用itertools包,这个包主要作用就是操作迭代器对象
def permute(nums):
    """
    :type nums: List[int]
    :rtype: List[List[int]]
    """
    if len(nums)==1:
        return [nums]
    if len(nums)==0:
        return [[]]
    return [list(i) for i in itertools.permutations(nums)] #permutations(iterable[, r])会返回所有可迭代对象的排序,r的默认值是可迭代对象的长度


# 方法2
def func(lst):
    result = []
    for i in lst:
        for j in lst:
            if i !=j:
                for k in lst:
                    if i!=k and j!=k:
                        result.append([i,j,k])
    return result

 

题目3:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。

示例:输入: n = 4, k = 2

        输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]

import itertools #引用itertools包,这个包主要作用就是操作迭代器对象

def combine(n, k):
    """
    :type n: int
    :type k: int
    :rtype: List[List[int]]
    """
    return [list(i) for i in itertools.combinations(range(1,n+1),k)]
    # combinations(iterable, r)创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序 (不带重复)

print(combine(4, 2))

 

备注:

itertools.permutations(iter,r) 和 itertools.combinations(iter,r)的区别是:前者是允许重复使用,后者是不能重复使用

itertools模块、排列、组合、算法

原文:https://www.cnblogs.com/su-sir/p/12049502.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!