关于列表重组的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. spring5源码分析系列(二)——spring核心容器体系结构

    首先我们来认识下IOC和DI: IOC(Inversion of Control)控制反转:控制反转,就是把原先代码里面需要实现的对象创建.依赖的代码,反转给容器来帮忙实现.所以需要创建一个容器,并且 ...

  2. Java回调实现异步

    在正常的业务中使用同步线程,如果服务器每处理一个请求,就创建一个线程的话,会对服务器的资源造成浪费.因为这些线程可能会浪费时间在等待网络传输,等待数据库连接等其他事情上,真正处理业务逻辑的时间很短很短 ...

  3. 多进程-Pool进程池

    from multiprocessing import Pool import os,time def Foo(i): time.sleep(2) print("in process&quo ...

  4. 牛客 545C 出题人的数组 (贪心)

    出题人有两个数组A,B,请你把两个数组归并起来使得$cost=\sum i c_i$最小. 归并要求原数组的数的顺序在新数组中不改变. 贪心水题 对于一段序列$A_i,A_{i+1},...,A_r$ ...

  5. Cypher查询在Neo4j中加载具有点数据类型属性的CSV文件

    我有一个CSV文件,标有3列,ID,纬度,经度.我想将CSV文件加载到Neo4j中并创建具有上述属性的节点.Location:属性应该是具有纬度和经度子属性的点数据类型. CSV是: ID,latit ...

  6. 定制ListView的界面(让列表中不仅有文字还有图片fruitImage.setImageResource(fruit.getImageId());)

    1.定义自己的实体类来作为ListView的适配类型如: public class Fruit { private String name;//水果的名字 private int imageId;// ...

  7. ABCD 谁是小偷

    题目: 警察局抓了a,b,c,d 4名偷窃嫌疑犯,其中只有一人是小偷.审问中,a说:“我不是小偷.”b说:“c是小偷.”c说:“小偷肯定是d.”d说:“c在胡说.” 现在已经知道这四人中有三人说的是真 ...

  8. celery 分布式异步队列框架使用方法

    简介: Celery  是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向broker传递消息,然后celery ...

  9. [转自SA]浅谈nginx的工作原理和使用

    nginx apache 简单对比 nginx 相对 apache 的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而 apac ...

  10. 复选框实现单选效果js/jq

    方法一: <input type="checkbox" name="test" onclick="checkedThis(this);" ...