关于列表重组的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)的区别是:前者是允许重复使用,后者是不能重复使用
原文:https://www.cnblogs.com/su-sir/p/12049502.html