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

时间:2016-06-21 14:35:12

标签: python list

您好我有一个列表[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

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

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

3 个答案:

答案 0 :(得分:4)

您可以通过re.findall()提取所有数字后跟tag,然后使用enumerate()all()检查数字是否连续:

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

答案 1 :(得分:0)

如果我是你,我会避免使用正则表达式并执行下面的操作。我从字符串中获取数字,无论是开始,结束等,然后将其与之前的值进行比较,如果不增加,则将其与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

答案 2 :(得分:0)

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。