Python方法检测从到值的列表是否包含最大值的序列号



我有一个id字典作为关键字,其中有一个列表列表,其中包含给定id的from和to整数值。所以它看起来像这样:

{1: [[0,100], [100, 500], [500, 800]], 2: [[0, 700], [800, 1000]]}

我正在尝试设置一种检查方法,以确保每个id的数字序列提供连续的数字列表,没有跳过。因此,在上面的例子中,id 2会被标记,因为它从700到800,而不是从700到700。不过,我不确定最好的办法是什么。任何建议都将不胜感激。

希望这有帮助:

from itertools import chain
for key,value in a.iteritems():
    lst=list(chain(*sorted(value)))
    if len([i for i in lst if lst.count(i)==1])==2:
        print "okay with key %s"%key
    else:
        print "Flagged with key %s"%key

供您输入:

{1: [[0,100], [100, 500], [500, 800]], 2: [[0, 700], [800, 1000]]}

输出为:

okay with key 1
Flagged with key 2

这个怎么样:

使用itertool:的成对配方

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)
data = {1: [[0,100], [100, 500], [500, 800]], 2: [[0, 700], [800, 1000]]}
for k,v in data.items():
    for a,b in pairwise(v):
        if a[-1]!=b[0]:
            print("key",k,"fail elemen",a,"and elemn",b,"in value",v)

输出

key 2 fail elemen [0, 700] and elemn [800, 1000] in value [[0, 700], [800, 1000]]

我最终找到了一个不同的解决方案。见下文:

d = {1: [[0,100], [100, 500], [500, 800]], 2: [[0, 700], [800, 1000]]}
for a in d.keys():
    x = [[i,i+1] for i,v in enumerate(d[a][:-1]) if v[1] != d[a][i+1][0]]
    if len(x) > 0:
        print a

因此,打印2。

无论如何,谢谢大家的建议。

最新更新