已经有一段时间了,我很难用我正在尝试的算法来概括我的想法。基本上,我有两个列表,想要得到这两个列表的所有组合。

我可能解释不正确,所以这里举个例子。

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:两个列表之间的组合?相关推荐

  1. python列表对应元素相乘_关于python:如何对两个列表进行元素明智的相乘?

    我想执行元素明智的乘法,将两个列表按值在Python中相乘,就像我们在Matlab中可以做到的那样. 这就是我在Matlab中要做的. 1 2 3a = [1,2,3,4] b = [2,3,4,5] ...

  2. python列表两两相减_用Python做打字软件,让你的打字快如闪电!附超详解和源码链接

    版本正在更新--,目前1.3.2 项目结果 GIF制作十分粗劣,自己看着都揪心,不过基本看清楚了 详细解释 下面我会详细解释一下,如果不看,就不看吧,直接向下看源码,传送门 基本结构+标题标签+提示+ ...

  3. python字符串能减吗_在python中减去两个字符串(Subtract two strings in python)

    在python中减去两个字符串(Subtract two strings in python) 我应该计算两个不同列表的元素之间的差异. 这是我的代码: import operator a = ['5 ...

  4. python中可以作为定界符_在 Python 中,字典和集合都是用一对 作为定界符,字典的每个元素有两部分组成,即 和 ,其中 不允许重复。_学小易找答案...

    [多选题]路由器A的G0/0/1接口配置信息如下,下列说法正确的有?(多选) acl number 3000 rule 5 deny 17 rule 10 deny 89 rule 15 deny 6 ...

  5. python中计算如何实现_基于python如何实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码# TTest.py # -*- coding: utf-8 -*- ''' # C ...

  6. 两表格合并_使用 Python 合并多个格式一致的 Excel 文件

    一 问题描述 最近朋友在工作中遇到这样一个问题,她每天都要处理如下一批 Excel 表格:每个表格的都只有一个 sheet,表格的前两行为表格标题及表头,表格的最后一行是相关人员签字.最终目标是将每个 ...

  7. python中反向切片用法_使用Python中的切片[:0:-1]反转列表

    举个例子a = [1, 2, 3, 4, 4, 5, 6, 9] 如果你试着用正指数分割它newa = a[1:5] 这将导致newa = [2, 3, 4, 4] 这是因为,在上面这种情况下,切片是 ...

  8. python列表元素都加倍_关于python列表增加元素的三种操作方法

    关于python列表增加元素的三种操作方法 1.insert方法,该方法包含两个参数,第一个参数为插入的位置参数,第二个参数为插入内容 a = [0,0,0] b = [1,2,3] a.insert ...

  9. python判断奇数和偶数_从Python中的给定列表中提取偶数和奇数

    python判断奇数和偶数 In this problem, we are given a list by the user which may be the mixture of even and ...

  10. python中result的用法_关于Python中的列表理解及用法

    在Python中,列表理解通常用于编写单行语句,这些语句通过可迭代对象进行迭代以创建新的列表或字典.本文首先介绍for循环如何在Python中工作,然后解释如何在Python中使用列表理解. Pyth ...

最新文章

  1. python3 信号量和线程池 semaphore ThreadPollExector
  2. 自己封装线程(Demo)
  3. winsever 2008 r2 管理员账号没有权限_钉钉管理员攻略—主管理员①
  4. 百度痞哥:百度贴吧的回帖为什么没做点赞功能?
  5. 指数分布的期望推导过程
  6. 【数据库原理及应用】经典题库附答案(14章全)——第十四章:分布式数据库系统
  7. 用函数计算工龄_用Excel计算财务账期,离不开这3个函数
  8. 自然场景人脸检测技术实践
  9. ubuntu anaconda配置环境变量_Anaconda从下载到环境变量配置(windows)
  10. java 取数组的前90位_java 从int数组中获取最大数的方法
  11. 使用原生Java代码生成可执行Jar包
  12. Maven最佳实践:管理依赖
  13. 存档修改 html,制作可以修改.rpgsave存档的网页
  14. MyBatisPlus多表关联查询,返回list
  15. Android 应用程序无响应(ANR)报错原因
  16. vue Root file specified for compilation
  17. 论文阅读——Aspect Sentiment Quad Prediction as Paraphrase Generation
  18. WWDC之优化App启动速度
  19. 教你免费且快速地搭建个人网站
  20. 树莓派外接can模块,can收发功能测试

热门文章

  1. python爬取qq音乐歌词风变编程_风变编程的Python课,让我离掌握编程又进了一步...
  2. Docker(狂神说)笔记
  3. 博世中国创新软件开发中心 BCSC
  4. 46家中外知名企业面试题目
  5. win7连接网络打印机需要输入网络密码,怎么办
  6. ValueError: Format specifier missing precision
  7. 混沌工程-为什么推广的如此困难
  8. unreal无损音乐百度云_嵐-IN THE SUMMER[FLAC]
  9. 从构建区块链理解区块链概念
  10. 用latex排版中的对象旋转问题