xzc_98 发表于 2021-6-28 03:53:22

list中寻找连续出现的位置

求教,在一个list中,想找到连续2次或3次或4次(连续出现次数可根据输入值变化)True的位置。
例如a = 。这个list的答案应该是[,]。
或者 * 3。答案应该是[]。
再或者 。答案应该是[,,]。
该怎样编写?

qq1151985918 发表于 2021-6-28 09:05:56

本帖最后由 qq1151985918 于 2021-6-28 09:13 编辑

def fun(data: list) -> list:
    results, result = [],
    for i in range(len(data)):
      if data:
            if result is None:
                result = i
                result[-1] += 1
            else:
                result[-1] += 1
      else:
            if result is not None and result[-1] >= 2:
                results.append(result)
            result =
    else:
      if result is not None and result[-1] >= 2:
            results.append(result)
    return results


if __name__ == "__main__":
    a =
    print(fun(a))

阿奇_o 发表于 2021-6-28 15:43:24

本帖最后由 阿奇_o 于 2021-6-28 19:46 编辑

# 思路:将False看做是括号,那么两个False之间,若为连续的True就可以很好地判断了

# 代码实现:
a =
# a = # 测试
a =

# 前后插入False,确保 True被False“包住”
a.insert(0, False)
a.append(False)

# 转为01字符串,以便于后面写判断
s = ''.join()
print(s)

# 确定False('0')出现的位置
fs = =='0']
print(fs)

# 根据前后两个False出现的位置,判断其之间 是否包着 连续的True('1')
lx = ['1'*(n+1) for n in range(int(input("True的最大连续次数为:")))]
result = []
for stop in fs:
    for start in fs:
      ss = s
      if ss in lx:# 如 '11', '111', '1111'
            # print()
            result.append()   
            # 注:正确的开始位置 本应该是 start+1,但我们一开始在 insert()的False,所以这里抵消了, 故是 start

print(result)

{:10_333:}


修改:有点偏差局限了,需改一下 去掉lx不用; 将 if ss in lx:改为if '0' not in ss and len(ss) >=2 :

OK。

xzc_98 发表于 2021-6-28 23:25:40

qq1151985918 发表于 2021-6-28 09:05


你好,如果我想改变原来2个连续就计入变为3个连续才计入,该怎么做?

qq1151985918 发表于 2021-6-28 23:27:20

xzc_98 发表于 2021-6-28 23:25
你好,如果我想改变原来2个连续就计入变为3个连续才计入,该怎么做?

代码里的所有2改成3就好了

xzc_98 发表于 2021-6-28 23:29:03

qq1151985918 发表于 2021-6-28 23:27
代码里的所有2改成3就好了

谢谢!

pppppddd 发表于 2021-7-12 21:21:59

还有别的方法不

pppppddd 发表于 2021-7-12 21:22:31

这刚开始result这步没看懂啊
页: [1]
查看完整版本: list中寻找连续出现的位置