python列表两两组合_关于python:两个列表之间的组合?
已经有一段时间了,我很难用我正在尝试的算法来概括我的想法。基本上,我有两个列表,想要得到这两个列表的所有组合。
我可能解释不正确,所以这里举个例子。
name = 'a', 'b'
number = 1, 2
在这种情况下,输出将是:
1. A1 B2
2. B1 A2
号
棘手的部分是,我可能在"name"变量中的项目比"number"变量中的项目多(数字总是等于或小于name变量)。
我很困惑如何进行所有组合(嵌套for循环?)如果名称中的项目比数字列表中的项目多,则在转换名称变量中的项目的逻辑上会更加混乱。
我不是最好的程序员,但如果有人能帮助我澄清逻辑/算法来实现这一点,我想我可以试一试。所以我被困在嵌套for循环上。
更新:
下面是3个变量和2个数字的输出:
name = 'a', 'b', 'c'
number = 1, 2
输出:
1. A1 B2
2. B1 A2
3. A1 C2
4. C1 A2
5. B1 C2
6. C1 B2
。
docs.python.org /图书馆/ itertools.html
"我看到dm03514招领的例子,它的使用,英语是不是我的目标,但itertools原型写Python代码,但希望最终在另一语言,所以我不想用任何工具是需要的elseway速效。
你问的是不是真的意义。如果第一个列表包含A,B,C的第二个包含1.2,什么是你所期望的结果吗?它可以做,如果你给的例子有不同的结果,一个4字母和一个数字每个(A1,A2,B1,B2)的,或如果两个表有相同的大小。
一个interjay同意。请指定一个非平等的大小案件,否则它不可能提供一个通用的解决方案。
嗨大家的,我更新的答案显示输出3和2个数字的名称,我需要它有思想,为什么在downvote苏拉。
如何将输出的外观和number = 1, 2, 3name = 'a', 'b', 'c'样的吗?
是很重要的订单或是足以产生"组合"所有你想要的吗?因此A1 B2 == B2 A1?
它会看起来像一mr.steak @我有2名以上的例子,但不是4和2年的结果会有更多的项目,因为有3数列表。一阶不bakuriu真物,试图捕捉)。
未来的人们注意这一问题的DUP ing:有一个像样的机会,得到了一系列cartesian产品列表?是一个更好的复制目标(有很多的东西是我们应该使用product复制在这里,即使这个问题没有解决的是这样)。在罕见的情况下,所有可能的两个replacements列表?可能是更好的(当选择一个值从每个指标在两个列表,这是一个解决方案A product再次,zipprepass)。
最简单的方法是使用itertools.product:
a = ["foo","melon"]
b = [True, False]
c = list(itertools.product(a, b))
>> [("foo", True), ("foo", False), ("melon", True), ("melon", False)]
。
OP没有要求笛卡尔积,这个答案(以及其他大多数答案)没有给出问题中指定的预期结果。
@Interjay你说得很对,但似乎有太多人认为这个答案是正确的,所以我只能假设这个问题的标题缺乏上下文。
@Xpy标题太短,无法解释一切。这就是为什么你需要阅读实际的问题。
欧普希望做出让步,但谷歌会派任何人(像我一样)来寻找这个答案——很高兴看到它得到了8倍的选票!
可能比上面最简单的简单:
>>> a = ["foo","bar"]
>>> b = [1, 2, 3]
>>> [(x,y) for x in a for y in b]
[('foo', 1), ('foo', 2), ('foo', 3), ('bar', 1), ('bar', 2), ('bar', 3)]
。
没有任何导入
最佳解决方案!谢谢您!其他的解决方案要么是明显错误的,要么只适用于特定的情况,如a>b等。
最毒气的解决方案!(避免不必要的进口)
时间复杂度为o(n^2)
下注解决方案!!简单的基础是最好的方法
假设len(list1) >= len(list2)。那么你想要的是从list1中获取长度为len(list2)的所有排列,并将它们与清单2中的项目匹配。在python中:
import itertools
list1=['a','b','c']
list2=[1,2]
[zip(x,list2) for x in itertools.permutations(list1,len(list2))]
退换商品
[[('a', 1), ('b', 2)], [('a', 1), ('c', 2)], [('b', 1), ('a', 2)], [('b', 1), ('c', 2)], [('c', 1), ('a', 2)], [('c', 1), ('b', 2)]]
号
结果正是我想要的,但是否有可能分享这背后的逻辑呢?如果我将代码转换成C或Java,我将无法访问ZIP或ItRealToC(虽然它们使生活非常简单)。
@用户1735075查看文档
@用户1735075:你知道Python是开源的吗?因此,您可以简单地下载源代码,看看它们做了什么。+1向Steak先生指出,该文档实际上有一个不使用zip和类似的示例实现。
太棒了..他们记录他们的算法。非常有帮助,谢谢Interjay和Steak先生!
我真的不能让它起作用,即使有你的例子…我只得到一个压缩对象列表。:
我在寻找一个列表,它本身与唯一的组合相乘,作为这个函数提供。
import itertools
itertools.combinations(list, n_times)
。
这里是从itertools上的python文档中摘录的,这可能有助于您找到所需的内容。
Combinatoric generators:
Iterator | Results
-----------------------------------------+----------------------------------------
product(p, q, ... [repeat=1]) | cartesian product, equivalent to a
| nested for-loop
-----------------------------------------+----------------------------------------
permutations(p[, r]) | r-length tuples, all possible
| orderings, no repeated elements
-----------------------------------------+----------------------------------------
combinations(p, r) | r-length tuples, in sorted order, no
| repeated elements
-----------------------------------------+----------------------------------------
combinations_with_replacement(p, r) | r-length tuples, in sorted order,
| with repeated elements
-----------------------------------------+----------------------------------------
product('ABCD', repeat=2) | AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
permutations('ABCD', 2) | AB AC AD BA BC BD CA CB CD DA DB DC
combinations('ABCD', 2) | AB AC AD BC BD CD
combinations_with_replacement('ABCD', 2) | AA AB AC AD BB BC BD CC CD DD
您可能想尝试一个单行列表理解:
>>> [name+number for name in 'ab' for number in '12']
['a1', 'a2', 'b1', 'b2']
>>> [name+number for name in 'abc' for number in '12']
['a1', 'a2', 'b1', 'b2', 'c1', 'c2']
。
Interjay对答案的微小改进,使结果成为一个扁平的列表。
>>> list3 = [zip(x,list2) for x in itertools.permutations(list1,len(list2))]
>>> import itertools
>>> chain = itertools.chain(*list3)
>>> list4 = list(chain)
[('a', 1), ('b', 2), ('a', 1), ('c', 2), ('b', 1), ('a', 2), ('b', 1), ('c', 2), ('c', 1), ('a', 2), ('c', 1), ('b', 2)]
来自此链接的引用
回答问题"给定两个列表,从每个列表中查找一个项目对的所有可能排列",并使用基本的python功能(即,不使用itertools),因此,可以很容易地为其他编程语言复制:
def rec(a, b, ll, size):
ret = []
for i,e in enumerate(a):
for j,f in enumerate(b):
l = [e+f]
new_l = rec(a[i+1:], b[:j]+b[j+1:], ll, size)
if not new_l:
ret.append(l)
for k in new_l:
l_k = l + k
ret.append(l_k)
if len(l_k) == size:
ll.append(l_k)
return ret
a = ['a','b','c']
b = ['1','2']
ll = []
rec(a,b,ll, min(len(a),len(b)))
print(ll)
退换商品
[['a1', 'b2'], ['a1', 'c2'], ['a2', 'b1'], ['a2', 'c1'], ['b1', 'c2'], ['b2', 'c1']]
。
没有Itertools
[(list1[i], list2[j]) for i in xrange(len(list1)) for j in xrange(len(list2))]
python列表两两组合_关于python:两个列表之间的组合?相关推荐
- python列表对应元素相乘_关于python:如何对两个列表进行元素明智的相乘?
我想执行元素明智的乘法,将两个列表按值在Python中相乘,就像我们在Matlab中可以做到的那样. 这就是我在Matlab中要做的. 1 2 3a = [1,2,3,4] b = [2,3,4,5] ...
- python列表两两相减_用Python做打字软件,让你的打字快如闪电!附超详解和源码链接
版本正在更新--,目前1.3.2 项目结果 GIF制作十分粗劣,自己看着都揪心,不过基本看清楚了 详细解释 下面我会详细解释一下,如果不看,就不看吧,直接向下看源码,传送门 基本结构+标题标签+提示+ ...
- python字符串能减吗_在python中减去两个字符串(Subtract two strings in python)
在python中减去两个字符串(Subtract two strings in python) 我应该计算两个不同列表的元素之间的差异. 这是我的代码: import operator a = ['5 ...
- python中可以作为定界符_在 Python 中,字典和集合都是用一对 作为定界符,字典的每个元素有两部分组成,即 和 ,其中 不允许重复。_学小易找答案...
[多选题]路由器A的G0/0/1接口配置信息如下,下列说法正确的有?(多选) acl number 3000 rule 5 deny 17 rule 10 deny 89 rule 15 deny 6 ...
- python中计算如何实现_基于python如何实现计算两组数据P值
我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...
- 两表格合并_使用 Python 合并多个格式一致的 Excel 文件
一 问题描述 最近朋友在工作中遇到这样一个问题,她每天都要处理如下一批 Excel 表格:每个表格的都只有一个 sheet,表格的前两行为表格标题及表头,表格的最后一行是相关人员签字.最终目标是将每个 ...
- python中反向切片用法_使用Python中的切片[:0:-1]反转列表
举个例子a = [1, 2, 3, 4, 4, 5, 6, 9] 如果你试着用正指数分割它newa = a[1:5] 这将导致newa = [2, 3, 4, 4] 这是因为,在上面这种情况下,切片是 ...
- python列表元素都加倍_关于python列表增加元素的三种操作方法
关于python列表增加元素的三种操作方法 1.insert方法,该方法包含两个参数,第一个参数为插入的位置参数,第二个参数为插入内容 a = [0,0,0] b = [1,2,3] a.insert ...
- python判断奇数和偶数_从Python中的给定列表中提取偶数和奇数
python判断奇数和偶数 In this problem, we are given a list by the user which may be the mixture of even and ...
- python中result的用法_关于Python中的列表理解及用法
在Python中,列表理解通常用于编写单行语句,这些语句通过可迭代对象进行迭代以创建新的列表或字典.本文首先介绍for循环如何在Python中工作,然后解释如何在Python中使用列表理解. Pyth ...
最新文章
- python3 信号量和线程池 semaphore ThreadPollExector
- 自己封装线程(Demo)
- winsever 2008 r2 管理员账号没有权限_钉钉管理员攻略—主管理员①
- 百度痞哥:百度贴吧的回帖为什么没做点赞功能?
- 指数分布的期望推导过程
- 【数据库原理及应用】经典题库附答案(14章全)——第十四章:分布式数据库系统
- 用函数计算工龄_用Excel计算财务账期,离不开这3个函数
- 自然场景人脸检测技术实践
- ubuntu anaconda配置环境变量_Anaconda从下载到环境变量配置(windows)
- java 取数组的前90位_java 从int数组中获取最大数的方法
- 使用原生Java代码生成可执行Jar包
- Maven最佳实践:管理依赖
- 存档修改 html,制作可以修改.rpgsave存档的网页
- MyBatisPlus多表关联查询,返回list
- Android 应用程序无响应(ANR)报错原因
- vue Root file specified for compilation
- 论文阅读——Aspect Sentiment Quad Prediction as Paraphrase Generation
- WWDC之优化App启动速度
- 教你免费且快速地搭建个人网站
- 树莓派外接can模块,can收发功能测试
热门文章
- python爬取qq音乐歌词风变编程_风变编程的Python课,让我离掌握编程又进了一步...
- Docker(狂神说)笔记
- 博世中国创新软件开发中心 BCSC
- 46家中外知名企业面试题目
- win7连接网络打印机需要输入网络密码,怎么办
- ValueError: Format specifier missing precision
- 混沌工程-为什么推广的如此困难
- unreal无损音乐百度云_嵐-IN THE SUMMER[FLAC]
- 从构建区块链理解区块链概念
- 用latex排版中的对象旋转问题