关于列表重组的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模块、排列、组合、算法的更多相关文章

  1. 排列组合算法(PHP)

    用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...

  2. C#语法灵活运用之排列组合算法

    今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...

  3. python实现高效率的排列组合算法-乾颐堂

    组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中. 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数. 然后从左到右扫描数组 ...

  4. 排列组合算法的javascript实现

    命题:从成员数为N的集合S中,选出M个元素,分别求其排列与组合结果集,即 A(N, M)与C(N, M) js解法: function queue(arr, size){ if(size > a ...

  5. 排列组合算法(基于c++实现)

    排列 全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个.现以{1, 2, 3}为例说明如何编写全排列的递归算法 第一层S1表示第一个数分别与第1.2.3个数交换位置,如123 ...

  6. c语言中一种典型的排列组合算法

    c语言中的全排列算法和组合数算法在实际问题中应用非常之广,但算法有许许多多,而我个人认为方法不必记太多,最好只记熟一种即可,一招鲜亦可吃遍天 全排列: #include<stdio.h> ...

  7. 针对较大基数的排列组合算法Java实现类(n选m)

    package com.utils; import java.math.BigDecimal; import java.math.RoundingMode; public class PLZUUtil ...

  8. C(n,m)排列组合算法

    主要解决C(n,m)问题 static class Extension { public static IList<IList<T>> GetGroup<T>(th ...

  9. 排列组合算法的Java实现

    转载于:http://cgs1999.iteye.com/blog/2327664

  10. N个数组中所有元素的排列组合(笛卡尔积)算法

    (1)N个数组对象中所有元素排列组合算法 private List<List<Object>> combineAlg(List<Object[]> nArray) ...

随机推荐

  1. 再谈Java数据结构—分析底层实现与应用注意事项

    在回顾js数据结构,写<再谈js对象数据结构底层实现原理-object array map set>系列的时候,在来整理下java的数据结构. java把内存分两种:一种是栈内存,另一种是 ...

  2. 中间消息件之 Solace(一) Solace的简介

    什么是Solace? Solace是一家加拿大注册的公司,总部设在安大略省渥太华. 成立于2001年. 这家公司一直致力于获取信息的艺术和科学,并提供世界上最灵活,最强大的数据移动平台. 背景 在信息 ...

  3. Mybatis(三) 动态SQL

    if + where 用法 1. if 元素来实现多条件查询 1.1 UserMapper.xml配置文件 <!--查询用户列表 (if)--> <select id="g ...

  4. Go语言流程控制中的break,continue和goto(七)

    break(跳出循环) break用于跳出整个循环,如下: func main() { ;i<;i++{ { break } fmt.Println(i) } } // 0 1 2 3 代码里只 ...

  5. 手写一个python迭代器

    分析 我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器. 如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__iter __()方法. 在一个类的实例对象想要变成迭代器,就 ...

  6. java保留小数点的几个方法

    方法一: String类自带的方法 String.format("%.2f", 1.2548); "%.2f"其中的数字决定保留几位方法二: 格式化的方法 pr ...

  7. c# 不让窗体显示在alt tab中

    protected override CreateParams CreateParams { get { const int WS_EX_APPWINDOW = 0x40000; const int ...

  8. Redis windows服务器配置可远程连接

    Redis配置远程可访问:修改redis.conf或redis.windows-service.conf配置文件. 具体通过 1:将绑定的本机给注释掉,找到这行 bind 127.0.0.1,然后在前 ...

  9. 关于解决SpringDataJpa框架实体类表字段创建顺序与数据库表字段展示顺序不一致的问题

    今天在公司的项目开发中,遇到一个问题: 后端对象实体类中写入字段顺序与数据库中的存储顺序不一致. 仔细观察到数据库中的表字段的排序方式是按照拼音字母的顺序abcdef......来存储的 而我的实体类 ...

  10. 中文转拼音,pinyin4j实用示例

    Pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换.拼音输出格式可以定制. Support Chinese character (both Simplified and Trandi ...