我希望在给定大小为n的数组的情况下生成所有可能的4元组对的列表. n至少为8,因此总能找到至少1对.

作为一个有助于理解问题的例子,我使用较小版本的问题,2元组对给出一个大小为5的数组.2元组对的预期结果将导致15个项目(元组被排序,没有重复) :

[(1,2),(3,4)],[(1,5)],(4,3),( 2,(2,4),3)],[( 1,5),[(2,4)]

我目前的方法是使用python中的itertools并遍历itertools.combinations返回的所有元素,执行2个循环并找到不共享单个元素的2对然后使用该元素.

为了在python代码中表达这一点,我准备了一个小片段:

arr = list(range(30)) # example list

comb = list(itertools.combinations(range(0,len(arr)),4))

for c1 in comb:

for c2 in comb: # go through all possible pairs

if len([val for val in c1 if val in c2]) == 0: # intersection of both sets results in 0,so they don't share an element

... # do something and check for duplicates

此方法正在完成其工作,但由于2个循环而效率低,并且仅在给定时间范围内适用于小n.这可以更有效率吗?

更新:在一些答案后,我评估了建议.对于我的特定情况,最好的事情是MSeifert的(现已删除的)答案提供的(扩展)算法,它执行速度最快:

def generate_four_pairs(n):

valids = range(0,n)

for x00,x01,x02,x03,x10,x11,x12,x13 in itertools.combinations(valids,8):

yield [x00,x03],[x10,x13]

yield [x00,x10],[x03,x11],x12],x13],x12]

yield [x00,[x02,x11]

yield [x00,[x01,x10]

yield [x01,x00],x13]

yield [x01,[x00,x12]

yield [x01,x11]

yield [x01,x13,x11]

对于一般方法,我建议NPE提供的答案,因为这是这个问题的最简单和最简单的可读答案.

python输出元组重复的元素_python – 从n个元素生成所有4元组对相关推荐

  1. python输出不重复的单词_Python情感分析(比较单词时,不计算文本中重复的单词)...

    您可以使用嵌套的for loop来实现这一点,但是这并不是解决简单问题的好方法:for posWord in posWords: for test in readFile: if i == test: ...

  2. python练习-Python输出不重复的字符

    #Python输出不重复的字符#输入一个字符串,把最左边的10个不重复的字符(大小写算不同字符)挑选出来 #如果不重复的字符不到10个,则按实际数目输出 #输入格式:输入一个字符串s #输出格式:输出 ...

  3. python 元组和列表区别_Python 基础(六):列表与元组

    1 列表 1.1 简介 Python 中没有数组,而是加入了功能更强大的列表(list),列表可以存储任何类型的数据,同一个列表中的数据类型还可以不同:列表是序列结构,可以进行序列结构的基本操作:索引 ...

  4. python取list的个别元素_python 获取list特定元素下标的实例讲解

    python 获取list特定元素下标的实例讲解 在平时开发过程中,经常遇到需要在数据中获取特定的元素的信息,如到达目的地最近的车站,橱窗里面最贵的物品等等.怎么办?看下面 方法一:利用数组自身的特性 ...

  5. python查看列表有多少元素_python 统计列表中元素的数量

    一.统计列表中不同元素的个数 这个需求是统计列表中不同元素有几个,由于列表是允许存在重复元素的,但是集合却不允许存在重复元素,所以可以将list转换为set,然后求长度. list=[1,2,1,2, ...

  6. python输出图形效果的代码_python打印图形大全(详解)

    原博文 2019-04-13 23:48 − 1)for i in range(0,10): shixin=chr(9679) print(shixin) -------------------结果: ...

  7. python集合增加元素_python集合的新增元素方法整理

    我们可以把全体人数当作一个集合,想要往其中加入新人有不同的增加方式.可以一周增加一次,也可以集中到月底一起加入集体.我们今天所要讲的在python集合中,添加元素的两种方法就可以这样理解.一个是整体加 ...

  8. python输出hello的字符串字数_python 字符串

    一.基本概述 在python中没有单独的字符类型,也即一个单独的字符在python中也是字符串类型.python中一般使用单引号或双引号表示字符串.当然也可使用三单引号和三双引号表示多行字符串. 二. ...

  9. python字典怎么增加元素_Python字典(dict)增加元素

    Python字典(dict)增加元素 在 如果 key 不存在,那么会将 key 添加进字典,并将该 key 的值设置为 value. 字典增加元素详解 语法 dict[key] = value 参数 ...

最新文章

  1. 05用线程类Thread开启线程
  2. Chromium:编译,运行
  3. 01.C++(一)----面向对象的思想
  4. ssh首次连接时提示yes/no
  5. G - 变形课 HDU - 1181(搜索之dfs)
  6. u盘 linux centos 5.3,鸟哥linux私房菜学习笔记,U盘安装centos5.3不能正常进入图形界面的问题...
  7. 《R语言预测实战》PDF,数据及代码
  8. c#命名规范(转载)
  9. apache服务器(修改主页文件、两个不同ip访问不同站点、统一ip不同端口访问不同站点)
  10. 计算机基础知识教程excel单元格拆分,电脑内怎么将excel表格中某个单元格的内容拆分至不同单元格里...
  11. canvas将彩色图片变为灰度图片理解问题
  12. 硬件设计22之高速电路设计保险丝的选型
  13. 简单枚举 / 枚举排列
  14. 在MAC环境下玩转树莓派
  15. DAMO-YOLO第三方数据训练教程
  16. 11广义表的基本概念和性质
  17. git push提示dst refspec XXX matches more than one
  18. 地下交通站之贾贵经典语录
  19. 守护网络安全 呵护精神家园 --常见网络风险(二)
  20. Nets Wire has multiple names

热门文章

  1. 自然语言处理的几个困难
  2. 详解摄像头各个引脚的作用关系
  3. 几个常见翻译引擎的不完全对比
  4. 继承redis spring_Spring 极速集成注解 Redis 实践
  5. python虚拟环境中安装diango_创建python虚拟环境,安装django,创建一个django项目,在项目中创建一个应用(ubuntu16.04)...
  6. python同步两张数据表_python 同步mysql数据库表
  7. 2021湖南l高考成绩查询入口,湘潭2021高考成绩查询入口
  8. python有趣的案例_Python有趣的小案例
  9. android dialogfragment style,Android DialogFragment 使用
  10. os2计算机网络,计算机网络 第二章 物理层