关于列表重组的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. elastic 查询案例Query与Filter + CRUD简单理解 + dynamic mapping + keyword

    1.增 PUT mytest01/external/ { "name": "xiaowei" } curl -XPUT '192.168.1.49:9200/m ...

  2. CentOS7安装Git-2.22.1

    1.Git: 分布式版本控制系统(最初用于Linux),每个人的电脑上都是一个完整的版本库,具有强大的分支管理. 自己可以在脱机环境查看开发的版本历史 多人开发时如果充当中央仓库的Git仓库挂了,任何 ...

  3. 2019中山纪念中学夏令营-Day20[JZOJ] T1旅游详解

    2019中山纪念中学夏令营-Day20[JZOJ] 提高组B组 Team_B组 T1 旅游 Time Limits: 2000 ms  Memory Limits: 262144 KB Descrip ...

  4. liunx忘记用户密码

    1.vim /etc/my.cnf [mysqld] skip-grant-tables ##追加此行,跳过权限表, 2.重启mysql systemctl restart mysqld 3.mysq ...

  5. 51nod 1251 Fox序列的数量 (容斥)

    枚举最多数字的出现次数$k$, 考虑其他数字的分配情况. 对至少$x$种数出现$\ge k$次的方案容斥, 有 $\sum (-1)^x\binom{m-1}{x}\binom{n-(x+1)k+m- ...

  6. Adam作者大革新, 联合Hinton等人推出全新优化方法Lookahead

    Adam作者大革新, 联合Hinton等人推出全新优化方法Lookahead   参与:思源.路.泽南 快来试试 Lookahead 最优化方法啊,调参少.收敛好.速度还快,大牛用了都说好. 最优化方 ...

  7. java 问题汇总

    1.自动加载出错 require a bean of .... The injection point has the following annotations: - @org.springfram ...

  8. postgresql 服务无法启动,日志中报如下错误

    1.postgresql 服务无法启动,日志中报如下错误,磁盘空间足够. 无法找到来自源 PostgreSQL 的事件 ID 0 的描述.本地计算机上未安装引发此事件的组件,或者安装已损坏.可以安装或 ...

  9. 超详细思路讲解SQL语句的查询实现,及数据的创建。

    最近一直在看数据库方面的问题,总结了一下SQL语句,这是部分详细的SQL问题,思路讲解: 第一步:创建数据库表,及插入数据信息 --Student(S#,Sname,Sage,Ssex) 学生表 CR ...

  10. Delphi Label组件