gpt4 book ai didi

Python-验证生成的幂集

转载 作者:行者123 更新时间:2023-11-30 22:15:50 26 4
gpt4 key购买 nike

我想仅根据“< >”中的数据验证生成的组合。

我有一个 Excel 工作表,其中包含根据“<>”条件生成的所有可能的组合: 以下是其示例:

    [<Pen(x)>-C(A2)-C(60)-<jack(c)>-xy1-[dress0]-C(D0)-lbr-]
[<Pen(x)>-C(A2)-C(60)-NULL-xy1-[dress0]-C(D0)-lbr-]
[NULL-C(A2)-C(60)-<jack(c)>-xy1-[dress0]-C(D0)-lbr-]
[NULL-C(A2)-C(60)-NULL-xy1-[dress0]-C(D0)-lbr-]

我想检查生成的组合是否有效。 例如:对于上面的列表,生成组合之前的原始字符串如下:

    <Pen(x)>-C(A2)-C(60)--<jack(c)>-xy1-[address0]-C(D0)-lbr-

请帮助我找到一种通用方法来验证基于<>生成的所有幂集。

举个简单的例子: 我有以下列表1。

[<A><B>-CAT-DOG]
[NULL-<B>-CAT-DOG]
[<A>-NULL-CAT-DOG]
[NULL-NULL-CAT-DOG]

列表1是以下所有可能的组合:

<A><B>-CAT-DOG

我想检查上面的list1是否有效

最佳答案

我们可以使用 itertools.product 构建所需的组合,生成 Cartesian product它的可迭代参数。但首先我们需要将输入字符串拆分为其组件。我们可以通过首先添加一些额外的空格,然后调用 .split 来做到这一点。方法。

然后我们可以转换 .split 返回的列表中的每个字符串。成一个元组。 < 包含的项目和>转换为包含该项目和 'NULL' 的 2 元组字符串,所有其他项都变成 1 元组。

from itertools import product

def make_powerset(base):
# Add some spaces to make splitting easier
s = base.replace('-', ' ').replace('<', ' <').replace('>', '> ')

# Convert items enclosed in <> into 2-tuples and make other items 1-tuples
elements = [(u, 'NULL') if u.startswith('<') else (u,) for u in s.split()]

# Create all the subsets by finding the Cartesian product of all the tuples
return {'-'.join(t).replace('>-<', '><') for t in product(*elements)}

# Tests

# Make a powerset from base
base = '<Pen(x)>-C(A2)-C(60)--<jack(c)>-xy1-[address0]-C(D0)-lbr-'
powerset = make_powerset(base)
for t in powerset:
print(t)
print()

# Test if the following data are in the powerset
data = (
'<Pen(x)>-C(A2)-C(60)-<jack(c)>-xy1-[address0]-C(D0)-lbr-',
'<Pen(x)>-C(A2)-C(60)-NULL-xy1-[address0]-C(D0)-lbr-',
'NULL-C(A2)-C(60)-<jack(c)>-xy1-[address0]-C(D0)-lbr-',
'NULL-C(A2)-C(60)-NULL-xy1-[address0]-C(D0)-lbr-',
'<Pen(y)>-C(A2)-C(60)-NULL-xy1-[address0]-C(D0)-lbr-',
)

for s in data:
print(s, s.rstrip('-') in powerset)

print('\n', '- ' * 20, '\n')

# Make another powerset
for t in make_powerset('<A><B>-CAT-DOG<C>'):
print(t)

输出

<Pen(x)>-C(A2)-C(60)-<jack(c)>-xy1-[address0]-C(D0)-lbr
NULL-C(A2)-C(60)-NULL-xy1-[address0]-C(D0)-lbr
<Pen(x)>-C(A2)-C(60)-NULL-xy1-[address0]-C(D0)-lbr
NULL-C(A2)-C(60)-<jack(c)>-xy1-[address0]-C(D0)-lbr

<Pen(x)>-C(A2)-C(60)-<jack(c)>-xy1-[address0]-C(D0)-lbr- True
<Pen(x)>-C(A2)-C(60)-NULL-xy1-[address0]-C(D0)-lbr- True
NULL-C(A2)-C(60)-<jack(c)>-xy1-[address0]-C(D0)-lbr- True
NULL-C(A2)-C(60)-NULL-xy1-[address0]-C(D0)-lbr- True
<Pen(y)>-C(A2)-C(60)-NULL-xy1-[address0]-C(D0)-lbr- False

- - - - - - - - - - - - - - - - - - - -

NULL-NULL-CAT-DOG-NULL
NULL-<B>-CAT-DOG-NULL
<A>-NULL-CAT-DOG-<C>
<A>-NULL-CAT-DOG-NULL
NULL-NULL-CAT-DOG-<C>
<A><B>-CAT-DOG-<C>
NULL-<B>-CAT-DOG-<C>
<A><B>-CAT-DOG-NULL

关于Python-验证生成的幂集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50172671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com