list中寻找连续出现的位置
求教,在一个list中,想找到连续2次或3次或4次(连续出现次数可根据输入值变化)True的位置。例如a = 。这个list的答案应该是[,]。
或者 * 3。答案应该是[]。
再或者 。答案应该是[,,]。
该怎样编写? 本帖最后由 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 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。 qq1151985918 发表于 2021-6-28 09:05
你好,如果我想改变原来2个连续就计入变为3个连续才计入,该怎么做? xzc_98 发表于 2021-6-28 23:25
你好,如果我想改变原来2个连续就计入变为3个连续才计入,该怎么做?
代码里的所有2改成3就好了 qq1151985918 发表于 2021-6-28 23:27
代码里的所有2改成3就好了
谢谢! 还有别的方法不 这刚开始result这步没看懂啊
页:
[1]