首页 > 解决方案 > 可靠性:Python 中的路径/剪切向量技术

问题描述

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

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

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

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

给定输入,lst我想返回一个由以下规则引导的列表字符串。

规则:

  1. 如果x i = 1:

    一个。返回(x i )

  2. 否则,如果x i = 0:

    湾。返回:(1 - x i )

例子:

[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

目标:

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

任何提示表示赞赏。

标签: pythonstringreliability

解决方案


item有值0,或者1但您需要它在列表中的位置来创建字符串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) 

推荐阅读