子字符串中的模式限制-Python

时间:2019-04-13 01:05:27

标签: python list substring

我在玻璃门上发现了一个问题。我没有其他澄清

Input:一个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个正确的值。我应该使用set而不是list吗?我尝试过,但是这种方法也不起作用。有人可以就如何解决这个问题提供一些指导吗?

感谢您的宝贵时间。

2 个答案:

答案 0 :(得分: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]]

答案 1 :(得分:1)

探针位于v [i:j]中。将v [i:j]更改为v [i:j + 1]