可靠性:Path/Cut Python 中的矢量技术

Reliability: Path/Cut Vector Technique in Python

我有一个列表,lst,它只包含长度为 n 的 0 的 1 的 .

该列表表示来自可靠性分析的切割向量或路径向量,它们可能是也可能不是最小的 cut/path 向量本身。

列表中的元素表示单独的变量,例如 x1x2x3 和列表的长度 n 表示所表示的变量数。

例如列表[0, 1, 1]表示3个变量,x1x2x3 .

给定输入 lst,我想 return 一个被引导的 liststring按照以下规则。

规则:

  1. 如果xi = 1:

    一个。 return (xi)

  2. 否则如果xi = 0:

    b。 return: (1 - xi)

示例:

[0, 1] => [1-X1, X2]"1-X1, X2"

[1, 0] => [X1, 1-X2]"X1, 1-X2"

[0, 1, 1] => [1-X1, X2, X3]"1-X1, X2, X3"

[1, 1, 1] => [X1, X2, X3]"X1, X2, X3"

我的代码:

def get_function(path_vector):
    lst = []
    for item in path_vector:
        if "0" in item:
            print("1-", item, sep="")
            lst.extend(["1-", item])
        else:
            print(item)
            lst.append(item)
    print(lst)
    expr = "*".join(lst)
    return expr

目标:

最终目标是加入新列表中的项目 - 用 * 分隔 - 并将它们输入到 sympy 库中的函数中。

如有任何提示,我们将不胜感激。

item 具有值 01 但您需要它在列表中的位置才能创建字符串 1-X{position}X{position}

您可以使用 enumarate(..., 1) 来获取它在列表中的位置。

因为你有整数值,所以你应该比较整数 if item == 0:


使用列表 examples 生成字符串并与预期结果进行比较的最小工作代码

def get_function(path_vector):
    lst = []

    for position, item in enumerate(path_vector, 1):
        if item == 0:
            text = f"1-X{position}" 
        else:
            text = f"X{position}" 
        lst.append(text)
        print('text:', text)

    print('lst:', lst)
    expr = "*".join(lst)

    return expr
    
# --- main --- 
    
examples = [    
    ([0, 1], "1-X1*X2"),
    ([1, 0], "X1*1-X2"),
    ([0, 1, 1], "1-X1*X2*X3"),
    ([1, 1, 1], "X1*X2*X3"),
]

for data, expected_result in examples:
    result = get_function(data)
    print(data, expected_result, result, expected_result==result)