【问题标题】:pattern restriction in substring- Python子字符串中的模式限制 - Python
【发布时间】:2019-04-13 11:35:44
【问题描述】:

我在 glassdoor 中发现了一个问题。我没有额外的说明

输入:一个 int 数组 [1,0,0,1,1,0,0,1,0,1,0,0,0,1] 您必须想出一个程序,该程序将根据模式给出数组的所有可能子集。 模式限制是字符串数组应该以 1 开头并以 1 结尾。所以会有很多子数组,比如从索引 0 到 3 和 0 到 4 以及索引 7 到 9

为了解决这个问题,我正在考虑使用 2 个 for 循环,如果两种情况的值都等于 1,则打印它们。

v=[1,0,0,1,1,0,0,1,0,1,0,0,0,1]

resultList=[]

for i in range(0,len(v)-1):
    for j in range(i+1, len(v)):
        if v[i]==1 and v[j]==1:
            r=v[i:j]
            resultList.append(r)

print(resultList)

输出:[[1, 0, 0], [1, 0, 0, 1], [1, 0, 0, 1, 1, 0, 0], [1, 0, 0, 1, 1, 0, 0, 1, 0], [1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0], [1], [1, 1, 0, 0],

到目前为止,我在输出 [1, 0, 0, 1] 中只看到 1 个正确值。我应该使用集合而不是列表吗?我试过了,但这种方法也不起作用。有人可以就如何解决这个问题给出一些指导吗?

感谢您的宝贵时间。

【问题讨论】:

    标签: python list substring


    【解决方案1】:

    您可以使用itertools.combinations 选择列表中值非零的 2 个索引:

    from itertools import combinations
    a = [1,0,0,1,1,0,0,1,0,1,0,0,0,1]
    [a[i: j + 1] for i, j in combinations((i for i, n in enumerate(a) if n), 2)]
    

    这会返回:

    [[1, 0, 0, 1], [1, 0, 0, 1, 1], [1, 0, 0, 1, 1, 0, 0, 1], [1, 0, 0, 1, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1], [1, 1], [1, 1, 0, 0, 1], [1, 1, 0, 0, 1, 0, 1], [1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1], [1, 0, 0, 1], [1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 1, 0, 0, 0, 1], [1, 0, 1], [1, 0, 1, 0, 0, 0, 1], [1, 0, 0, 0, 1]]
    

    【讨论】:

      【解决方案2】:

      问题在 v[i:j] 中。把 v[i:j] 改成 v[i:j+1]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-20
        • 2023-03-20
        相关资源
        最近更新 更多