V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
frmongo
V2EX  ›  Python

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

  •  
  •   frmongo · 2019-07-25 16:29:57 +08:00 · 1501 次点击
    这是一个创建于 1942 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我有一个超级长的 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 四个数字)
    9 条回复    2019-07-26 03:04:28 +08:00
    hjq98765
        1
    hjq98765  
       2019-07-25 16:51:27 +08:00
    抛砖:
    ''.join(map(str,your_list)).split('3102')
    xpresslink
        2
    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
        3
    Vegetable  
       2019-07-25 16:53:51 +08:00
    @hjq98765 骚断腿
    momocraft
        4
    momocraft  
       2019-07-25 17:03:20 +08:00
    “不完整” 可以任意长吗?如果长度不定,还存在确定的步数吗?
    xpresslink
        5
    xpresslink  
       2019-07-25 17:04:52 +08:00
    @hjq98765 这么做有 bug
    Raymon111111
        6
    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
        7
    hjq98765  
       2019-07-25 17:07:02 +08:00
    @xpresslink #5 原文:“@hjq98765 这么做有 bug ”
    ======
    回复:嗯,忘了 split 里面是每个字符单独视为分隔符,不是整体作为分隔符……
    Raymon111111
        8
    Raymon111111  
       2019-07-25 17:08:31 +08:00
    有个小毛病, 如果相等而且是 2 应该是 curIndex++ 并且 startIndex = curIndex
    necomancer
        9
    necomancer  
       2019-07-26 03:04:28 +08:00
    1 楼++
    import re
    re.split('3102', ''.join(map(str,your_list)))
    然后去数连续非 '' 元素的个数。方法很多~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5533 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:20 · PVG 15:20 · LAX 23:20 · JFK 02:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.