如何在列表中找到元素是连续的

2024-09-27 04:22:25 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有一个列表[tag1 tag2],我想知道标签后面的数字是否是递增的。你知道吗

match_atr_value = re.search('(.+)\~(\w+)',each_line)
tags = match_atr_value.group(1).split('.')
print tag


Input: 
[tag1 tag2]
[tag1 tag3]
[tag1 tag2 tag4]

Output:
Incremental
Not
Not

“连续整数是按顺序排列的整数”

有更简单的方法吗?我所要做的就是检查它是否是增量的,如果是,我应该使用它们,否则我应该抛出一个异常。 谢谢


Tags: re列表searchvaluematchlinetagsnot
3条回答

您可以通过^{}提取紧跟tag的所有数字,然后使用^{}^{}检查数字是否连续:

import re

l = [
    "[tag1 tag2]",
    "[tag1 tag3]",
    "[tag1 tag2 tag4]"
]

pattern = re.compile(r"tag(\d+)")
for item in l:
    numbers = map(int, pattern.findall(item))  # if Python 3: call list() on that
    result = all(index == item for index, item in enumerate(numbers, start=numbers[0]))
    print(result)

印刷品:

True
False
False
tag1val = int(re.search(r'\D*(\d+)', tag1).group(1))
tag2val = int(re.search(r'\D*(\d+)', tag2).group(1))
(tag1val - tag2val) == -1
  True
tag3val = int(re.search(r'\D*(\d+)', tag3).group(1))
(tag1val - tag3val) == -1
  False
(tag2val - tag3val) == -1
  True

如果你想坚持使用正则表达式,你可以走这条路。如果差值为-1,则右侧的差值比左侧的差值大1。你知道吗

如果我是你,我会避开正则表达式,做下面这样的事情。我从字符串中得到数字,不管它是开始的,结束的,等等,然后将它与前一个值进行比较,如果它没有增加的话return False

def isIncreasing( listy ):
        prev = 0
        for w in listy:
                val = [''.join(s) for s in w if s.isdigit()]
                cur = int(val[0])
                if cur != prev+1:
                        return False
                prev = cur
        return True

相关问题 更多 >

    热门问题