这是使用itertools置换和链函数的另一种方法。您还需要检查索引是否排成一行并且长度相同,以及是否有多个元素被替换from itertools import *

data_small = [ ['a','b','c'], ['d','e','f'] ]

data_big = [ ['a','b','c'], ['d','e','f'], ['u','v','w'], ['x','y','z'] ]

def check(data, sub):

check_for_mul_repl = []

for i in data:

if len(i) != len(data[0]):

return False

for j in i:

if j in sub:

if i.index(j) != sub.index(j):

return False

else:

if i not in check_for_mul_repl:

check_for_mul_repl.append(i)

if len(check_for_mul_repl) <= 2:

return True

print [x for x in list(permutations(chain(*data_big), 3)) if check(data_big, x)]

['a', 'b', 'c'], ['a', 'b', 'f'], ['a', 'b', 'w'], ['a', 'b', 'z'],

['a', 'e', 'c'], ['a', 'e', 'f'], ['a', 'v', 'c'], ['a', 'v', 'w'],

['a', 'y', 'c'], ['a', 'y', 'z'], ['d', 'b', 'c'], ['d', 'b', 'f'],

['d', 'e', 'c'], ['d', 'e', 'f'], ['d', 'e', 'w'], ['d', 'e', 'z'],

['d', 'v', 'f'], ['d', 'v', 'w'], ['d', 'y', 'f'], ['d', 'y', 'z'],

['u', 'b', 'c'], ['u', 'b', 'w'], ['u', 'e', 'f'], ['u', 'e', 'w'],

['u', 'v', 'c'], ['u', 'v', 'f'], ['u', 'v', 'w'], ['u', 'v', 'z'],

['u', 'y', 'w'], ['u', 'y', 'z'], ['x', 'b', 'c'], ['x', 'b', 'z'],

['x', 'e', 'f'], ['x', 'e', 'z'], ['x', 'v', 'w'], ['x', 'v', 'z'],

['x', 'y', 'c'], ['x', 'y', 'f'], ['x', 'y', 'w'], ['x', 'y', 'z']

这不关心是否有多个元素被替换

^{pr2}$

我使用置换而不是组合的原因是('d','b','c')在组合方面等于{},而不是在置换中

如果你只想要组合,那就简单多了。你能做到的def check(data) #Check if all sub lists are same length

for i in data:

if len(i) != len(data[0]):

return False

return True

if check(data_small):

print list(combinations(chain(*data_small), 3))

[('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'b', 'e'), ('a', 'b', 'f'),

('a', 'c', 'd'), ('a', 'c', 'e'), ('a', 'c', 'f'), ('a', 'd', 'e'),

('a', 'd', 'f'), ('a', 'e', 'f'), ('b', 'c', 'd'), ('b', 'c', 'e'),

('b', 'c', 'f'), ('b', 'd', 'e'), ('b', 'd', 'f'), ('b', 'e', 'f'),

('c', 'd', 'e'), ('c', 'd', 'f'), ('c', 'e', 'f'), ('d', 'e', 'f')]

python所有组合,在python中组合n个列表的所有元素相关推荐

  1. python 如何在一个for循环中遍历两个列表

    是我在看<笨方法学python>过程中发现有一行代码看不懂--" for sentence in snippet, phrase:",所以研究了半天,感觉挺有收获的.所 ...

  2. oracle如何组合索引,Oracle中组合索引的使用

    Oracle中组合索引的使用 Oracle中组合索引的使用 一.什么是索引? 数据库索引类似一本书的目录,目录中将书的内容先分为第一层(第一章.第二章--第N章的标题和对应页码),第二层(1.1XXX ...

  3. python入门编程题库-Python随笔30:Python基础编程练习题25~26

    注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. 注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性. Python编程 Python基础练习题25:合并两个列 ...

  4. python的继承用法_python之继承中组合用法与菱形继承关系查找法

    1.什么是组合 组合就是一个类的对象具备某一属性,该属性的值是指向另外外一个类的对象 2.为什么用组合 组合也是用来解决类与类之间代码冗余问题 3.用法 class Course:           ...

  5. python中组合数据类型、函数和代码复用的难点_Python电子教案5-2 函数和代码复用...

    <Python电子教案5-2 函数和代码复用>由会员分享,可在线阅读,更多相关<Python电子教案5-2 函数和代码复用(56页珍藏版)>请在人人文库网上搜索. 1.七段数码 ...

  6. python 排列组合_Python 实现排列组合中 nCr 算法

    前言 本文提供一种使用 Python 计算 组合公式 nCr 比较高效的算法. 环境 Python 2.7. 公式中,n为下角标,m为上角标. C(n, m) = A(n, m) / m! = n! ...

  7. Python中的pynput中组合键的键值

    pynput 监听键盘组合键 监听键盘组合键 更多的其他组合键键值 监听键盘组合键 在使用pynput监听键盘组合键的时候,需要知道组合键的键值是什么才可以.例如下面: <48>代表的就是 ...

  8. python二维列表每个子列表取一个元素的所有组合

    这是一个汉字字符串: "银行卡测试" 我要求出他的拼音首字母组合, 预期:"yhkcs" 实际:"yhqcs" 没错,它含有一个多音字:卡 ...

  9. 哪个选项不是python文件打开的合法模式组合_下面代码的输出结果是( ):

    [填空题]Python使用____作为转义符的开始符号. [单选题]本工程墙体做法,以下说法正确的是 ( ) . [多选题]现浇板板上预留的孔洞,说法正确的是( ). [填空题]____符号用于Pyt ...

  10. 深度之眼 - Python学习笔记——第四章 组合数据类型

    第四章 组合数据类型 4.1 列表 列表是可变的! 4.1.1 列表的表达 序列类型:内部元素有位置关系,能通过位置序号访问其中元素 列表是一个可以使用多种类型元素,支持元素的增.删.查.改操作的序列 ...

最新文章

  1. js array push 添加内容
  2. WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种
  3. JavaScript是如何工作的:JavaScript的共享传递和按值传递
  4. octave绘制图片Figure后无法关闭
  5. [Java基础]自然排序Comparable的使用
  6. android设置错误页面,Android ViewPager设置当前项目/页面时抛出IndexOutOfBounds异常
  7. 中本聪主题系列NFT收藏品在OpenSea发售,于26秒内售罄
  8. 存储过程中拼接sql的示例
  9. Linux课程第二十四天学习笔记
  10. quartz spring配置实例代码demo下载
  11. 百度网盘打开显示读写权限不足
  12. 采购与供应链管理 读书笔记一
  13. 使用Ruby搭建Redis 集群
  14. 通过bitmap改变图片的大小
  15. 安装软件时遇到 1152:Error extracting to the temporary location
  16. 用PS画出少女脸颊红晕
  17. 海南信用社计算机试题,2018海南农村信用社考试 计算机 模拟试卷六答案
  18. API 快速开发平台设计思考
  19. pandas中DataFrame可视化之画多图的方法小结
  20. <贪心算法>学习及经典实例分析

热门文章

  1. 190520每日一句
  2. fatal error LNK1281: 无法生成 SAFESEH 映像
  3. Atitit 艾提拉博士带来“深度?广度?高度 人员的职业发展之路 ”的主题分享。 目录 1.1. 技术团队气氛的区别 开发架构模式 2 1.2. 技术人员的职业发展有哪些路线? 3 1.3. 主
  4. atitit 组织机构性质与名称表.docx
  5. Atitit js canvas的图像处理类库attilax总结与事业
  6. atititt.java定时任务框架选型Spring Quartz 注解总结
  7. paip.java 多线程参数以及返回值Future FutureTask 的使用.
  8. paip.提升分词---准确度--常用量词表
  9. paip.输入法编程---增加码表类型
  10. paip.php eclipse output echo 乱码