鱼C论坛

 找回密码
 立即注册
查看: 1955|回复: 22

[已解决]大佬们请帮我康康,一个关于排列组合的问题

[复制链接]
发表于 2022-1-8 18:35:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬们,问题是这样的:
我有两组数据,例如:
第一组数据 = [A1,B1,C1,D1]
第二组数据 = [A2,B2,C2,D2]
出于某种需要,我想弄第三组数据[A,B,C,D],第三组数据中的A、B、C、D分别可能来自第一组或者第二组
现在我想弄一个列表出来,列表中,以列表的形式包含了第三组数据的所有可能性,请问有没有比较简单可行的方法 想学习学习 ,在此先谢谢各位大佬们啦!!!!!!
最佳答案
2022-1-8 18:57:40
  1. from itertools import combinations as c
  2. A = ['a', 'b', 'c', 'd']
  3. B = ['e', 'f', 'g', 'h']
  4. arr = [list(i) for i in c(A+B, 4)]
  5. print(arr)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-8 18:57:40 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +10 鱼币

  1. from itertools import combinations as c
  2. A = ['a', 'b', 'c', 'd']
  3. B = ['e', 'f', 'g', 'h']
  4. arr = [list(i) for i in c(A+B, 4)]
  5. print(arr)
复制代码

评分

参与人数 1荣誉 +1 鱼币 +5 贡献 +1 收起 理由
TGgan + 1 + 5 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-1-8 19:36:10 | 显示全部楼层

谢谢!!学到了!!!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-8 20:26:58 | 显示全部楼层

发现好像不太行,因为我的第三组数据里的A只能来自A1或者A2,这样排列出来效果不是那样的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-8 20:40:39 | 显示全部楼层
TGgan 发表于 2022-1-8 20:26
发现好像不太行,因为我的第三组数据里的A只能来自A1或者A2,这样排列出来效果不是那样的{:10_ ...

你的意思是 A1 或 A2 选其中一个,B1 或 B2 选其中一个,以此类推?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-8 20:51:03 | 显示全部楼层
TGgan 发表于 2022-1-8 20:26
发现好像不太行,因为我的第三组数据里的A只能来自A1或者A2,这样排列出来效果不是那样的{:10_ ...

  1. A = ['A1', 'B1', 'C1', 'D1']
  2. B = ['A2', 'B2', 'C2', 'D2']
  3. C = [list(i) for i in zip(*[A, B])]
  4. arr = [[a, b, c, d] for a in C[0] for b in C[1] for c in C[2] for d in C[3]]
  5. print(arr)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-8 21:43:35 | 显示全部楼层
TGgan 发表于 2022-1-8 20:26
发现好像不太行,因为我的第三组数据里的A只能来自A1或者A2,这样排列出来效果不是那样的{:10_ ...

假如数组 A 或 B 长度不一定(例如你的问题给定数据组 4 个元素为一组),则用:
  1. # 任意长度数组 A 和 B 都可用此代码(但必须确保 A 和 B 长度一致)
  2. A = ['A1', 'B1', 'C1', 'D1', 'E1']
  3. B = ['A2', 'B2', 'C2', 'D2', 'E2']
  4. C = [list(i) for i in zip(*[A, B])]
  5. n = 2**(len(A))
  6. m = n>>1
  7. index = []
  8. while m:
  9.     key = 1
  10.     temp = []
  11.     while len(temp) != n:
  12.         for i in range(m): temp.append(key)
  13.         key = 0 if key else 1
  14.     index.append(temp)
  15.     m >>= 1
  16. index = [list(elem) for elem in zip(*[each for each in index])]
  17. arr = []
  18. for i in index:
  19.     temp = []
  20.     for k, j in enumerate(i):
  21.         temp.append(C[k][j])
  22.     arr.append(temp)

  23. print(arr)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
TGgan + 5 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-1-8 23:45:22 | 显示全部楼层
傻眼貓咪 发表于 2022-1-8 21:43
假如数组 A 或 B 长度不一定(例如你的问题给定数据组 4 个元素为一组),则用:

谢谢谢谢大佬,我一定好好研究,哈哈哈哈,我在应用中确实是一组6个数据
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-9 12:52:01 | 显示全部楼层

回帖奖励 +10 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-9 18:00:24 | 显示全部楼层

回帖奖励 +10 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 18:09:08 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 18:51:52 | 显示全部楼层

回帖奖励 +10 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 19:27:10 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 19:27:52 | 显示全部楼层

回帖奖励 +10 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-10 08:13:51 | 显示全部楼层

回帖奖励 +10 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-10 08:49:57 | 显示全部楼层

回帖奖励 +10 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-10 09:00:45 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-10 09:01:43 | 显示全部楼层

回帖奖励 +10 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-10 09:24:32 | 显示全部楼层

回帖奖励 +10 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-10 09:26:08 | 显示全部楼层
解决就好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 15:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表