大佬,帮看这个序列怎么分析?

2019-07-25 16:29:57 +08:00
 frmongo
我有一个超级长的 list,正常情况下,里面包含的数字是这样的[3,1,0,2,3,1,0,2。。。。] 总之就是一直循环 3102 就对了。注意 list 第一个数字不一定是 3 呢,可以是 3、1、0、2 四个数中的一个。
但是有 bug 修改了这个 list,我想分析出,如果以一个完整或者不完整的一个循环(完整的循环就是 3、1、0、2 )为一步,这个被修改过的 list 里有多少步是连续不完整的。(完整的定义就是有连续的 3、1、0、2 四个数字)
1519 次点击
所在节点    Python
9 条回复
hjq98765
2019-07-25 16:51:27 +08:00
抛砖:
''.join(map(str,your_list)).split('3102')
xpresslink
2019-07-25 16:52:52 +08:00
楼主描述问题不是太清楚,让人听了云里雾里的。
思路很简单,把 list 按 4 个元素分割 然后 用每个子 list 做 set 和 set((3,1,0,2))比较
if (set((3,1,0,2)) - set([2,0,1,3]))
或者 if len(set((3,1,0,2)) & set([2,0,1,3]))==4 就可以判断出来了。
Vegetable
2019-07-25 16:53:51 +08:00
@hjq98765 骚断腿
momocraft
2019-07-25 17:03:20 +08:00
“不完整” 可以任意长吗?如果长度不定,还存在确定的步数吗?
xpresslink
2019-07-25 17:04:52 +08:00
@hjq98765 这么做有 bug
Raymon111111
2019-07-25 17:06:44 +08:00
感觉问题没有良好定义

不过要分析直接遍历就行了吧?

用 cur 标记当前应该是什么值

用 startIndex 标记计算起始 index

用 curIndex 标记当前计算的 index

然后开始遍历, 直到结束

cur = 3, startIndex=0, curIndex=0

如果当前值和 cur 不等, 那么就是不符合的值, 记录 startIndex 和 curIndex, 标记这一段都是不符合的, cur 重置回 3

如果值相等并且不是 2, 那么 curIndex++, 同时 cur 往后走一位

如果值相等是 2, 那么 startIndex 和 curIndex 是满足条件的序列, 同时 ++ 开始新的判定, 并且 cur 重置回 3
hjq98765
2019-07-25 17:07:02 +08:00
@xpresslink #5 原文:“@hjq98765 这么做有 bug ”
======
回复:嗯,忘了 split 里面是每个字符单独视为分隔符,不是整体作为分隔符……
Raymon111111
2019-07-25 17:08:31 +08:00
有个小毛病, 如果相等而且是 2 应该是 curIndex++ 并且 startIndex = curIndex
necomancer
2019-07-26 03:04:28 +08:00
1 楼++
import re
re.split('3102', ''.join(map(str,your_list)))
然后去数连续非 '' 元素的个数。方法很多~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586181

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX