鱼C论坛

 找回密码
 立即注册
查看: 1629|回复: 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
from itertools import combinations as c
A = ['a', 'b', 'c', 'd']
B = ['e', 'f', 'g', 'h']
arr = [list(i) for i in c(A+B, 4)]
print(arr)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +10 鱼币

from itertools import combinations as c
A = ['a', 'b', 'c', 'd']
B = ['e', 'f', 'g', 'h']
arr = [list(i) for i in c(A+B, 4)]
print(arr)

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

谢谢!!学到了!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

发现好像不太行,因为我的第三组数据里的A只能来自A1或者A2,这样排列出来效果不是那样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你的意思是 A1 或 A2 选其中一个,B1 或 B2 选其中一个,以此类推?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

A = ['A1', 'B1', 'C1', 'D1']
B = ['A2', 'B2', 'C2', 'D2']
C = [list(i) for i in zip(*[A, B])]
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]]
print(arr)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

print(arr)

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

谢谢谢谢大佬,我一定好好研究,哈哈哈哈,我在应用中确实是一组6个数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 18:09:08 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 19:27:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-10 09:00:45 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-10 09:26:08 | 显示全部楼层
解决就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 09:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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