微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我正在寻找一种在 Python 中组合多个列表的方法itertools.product 与我想要做的非常接近

如何解决我正在寻找一种在 Python 中组合多个列表的方法itertools.product 与我想要做的非常接近

它可能在 Google 上,但我很难用语言表达我想要做的事情。 itertools.product 很接近,但我也希望它给我更小的组合,而 itertools 只提供所有列表的组合。用一个例子来解释可能更容易:

我想合并的列表示例: [[a,b,c],[d,e,f],[g,h,i]]

Itertools 回馈: [a,d,g],[a,h]....[c,f,h],[c,i](27 个结果)

我正在寻找的输出: 以上,加上

[a,d],e],[b,i],[e,[f,[ f,i]

总共会有 45 个结果。请注意,我只是在寻找彼此相邻的列表之间的组合(不想返回 [a,g])。列表也不会这么简单,会有 10 个列表,每个列表 3-4 个字符。

我唯一的代码行是: 列表(itertools.product(*thelist))]。我只是不知道接下来我要在这里做什么。我感觉有一些方法可以用 itertools 来做到这一点,我就是想不通。

解决方法

在我看来,您想在列表列表的每个子列表上运行 itertools.product,并将结果连接在一起。

以下是否满足您的需求?

import itertools

def combine(lists,min_length):
    items = []
    for start in range(len(lists)):
        for end in range(start + min_length,len(lists) + 1):
            items.extend(itertools.product(*lists[start:end]))
            
    return items

我使用以下代码调用了这个函数:

combine([["a","b","c"],["d","e","f"],["g","h","i"]],2)

它返回了一个包含 45 个元组的列表,其中似乎包含您要查找的所有项目。

,

您有前 27 个。以下是您获得其他 18 个的方法:

import itertools as it
lst = [['a','b','c'],['d','e','f'],['g','h','i']]

result = [it.product(lst[i],lst[i+1]) for i in range(len(lst)-1)]
result = list(it.chain.from_iterable(result))

print(result)
#[('a','d'),('a','e'),'f'),('b',('c',('d','g'),'h'),'i'),('e',('f','i')]
,

使用来自 HERE 的非常聪明的位检查方法

from itertools import product

x = ('abc','def','ghi')

def subsets(s):
    sets = []
    for i in range(1,1 << len(s)):
        if bin(i).count("1") != 1 and '11' in bin(i):
            subset = [s[bit] for bit in range(len(s)) if is_bit_set(i,bit)]
            sets.append(subset)
    return sets

def is_bit_set(num,bit):
    return num & (1 << bit) > 0

a = 0
super_sets = subsets(x)
for sset in super_sets:
    a += len(list(product(*sset)))
    #print(list(product(*sset)))
print(a)

54

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?