-2
list = [['a', (1,1)], ['a', (1,2)], ['a', (1,4)], ['a', (1,5)]]

for i in list:
    print "the i is ", i
    print i[0]   # 'a'
    print i[1]   # (1, 1)
    n = 'a'
    v = (1,1)
    #n = re.search(r'[a-z]', i[0])
    #v = (v[0], (v[1] + 1))
    print "just", i[1]
    print "trying ", v
    for j in i:  
        if (j[0] != n):
            v = (1, 1)
            n = i[0]
        if (i[1] != v):
            print v
            raise ValueError, '[%s, %s] is missing' %(i[0], (i[1][0], i[1][1]-1))

        v = (v[0], (v[1] + 1))

値は、最初の繰り返しの後に変更されていないよう(1,1)です['a', (1, 3)]。一般に、コードは['a', (1,1)]リスト内の欠落を検出するために始まり、シーケンス内の各項目に従います

4

2 に答える 2

0

入れたい

v = (1,1)

for ループの外側v = (1, 1)(また、if (j[0] != n)ステートメントにも入れたくありません)。そうしないと、(1, 1)毎回元に戻されます。

ETA: そうは言っても、これは問題を解決する良い方法ではありません。次のようなことをしてみませんか:

for i in range(1, 6):
    if ["a", (1, i)] not in list:
        raise ValueError, '["a", (1, %s)] is missing' % i
于 2012-08-05T03:41:29.163 に答える
0

これが繰り返し尋ねられるのを見たので、ここに完全な例があります

def ListToDict(l):
    d = {}
    for itm in l:
        if  itm[0] not in d:d[itm[0]]=[]
        d[itm[0]].append(itm[1])
    for key in d:
        itm = d[key]
        if isinstance(itm,(list,tuple)) and len(d[key])>0 and isinstance(d[key][0],(tuple,list)):
            d[key] = ListToDict(d[key])
    return d
def ValidateSequences(d):
    if isinstance(d,(tuple,list)):
        return sorted(d) == range(min(d),max(d)+1)
    elif isinstance(d,dict):
        r = {}
        for key in d:
            r[key] = ValidateSequences(d[key])
        return r
my_list = [['a', (1,1)], ['a', (1,2)], ['a', (1,4)], ['a', (1,5)]]
d = ListToDict(my_list)
print "Validated:",ValidateSequences(d)
my_list.append(["a",(1,3)])
d = ListToDict(my_list)
print "Revalidated:",ValidateSequences(d)

そして出力は

Validated: {'a': {1: False}}
Revalidated: {'a': {1: True}}
于 2012-08-05T04:27:14.287 に答える