2012-08-02 29 views
0

如果如何處理的元組

list_1 = [(1, 1), (1, 3), (1, 4), (2, 2), (2, 3)] 

的某些模式考慮爲(I,J)的元組的元素現在我們知道,如果我們知道,如果我們知道如果(1,3)存在那麼(1,1)和(1,2)應該存在,如果其中任何一個丟失錯誤報告。錯誤檢測應該先對(1,1)和(1,2)逐個進行。類似地,如果我們知道對於另一個序列,如果(2,3)存在,則類似地(2,1)和(2,2)將存在。

這也是一個例子列表。這個例子也可以是:

list_1 = [(1,3),(1,4),(2,2),(2,3),(3,1)(3,4)]現在在這種情況下,如果存在(3,4),則存在(3,1),(3,2)和(3,3)。這種模式可以通過第j個元素的最大值來確定每個「我」我的代碼GI

for i, e in enumerate(list_1): 
       i1 = (1,1) 
       if i1 not in list_1: 
       raise ValueError, '%s is missing in %s' %(i1, production) 

       if (e[0] == e[1]) and ((e[0],e[1]) not in list_1): 
       #if i1 not in list_1: 
       raise ValueError, '%s is missing in %s' %((e[0], e[1]), production) 

       print e, e[0], e[1], (e[0], e[1]) 
       if i!=len(list_1)-1: 


       if e[0]==list_1[i+1][0] and e[1]!=list_1[i+1][1]-1: 

        raise ValueError, '(%s,%s) is missing in %s ' %(e[0], e[1]+1, production) 
+0

實幹製作的假設是我認爲你的問題(因爲它更像是一個'聲明')可能是...如何澄清它與你的企圖代碼直到這一點... – 2012-08-02 23:22:55

+1

你已經問這個問題(或微不足道的變化)過去幾天。很明顯,無論我們做什麼都不會對你有多大幫助;-(也許是時候考慮另一種方法了......我建議先通過一個教程,讓答案對你更有意義。 – DSM 2012-08-02 23:25:44

+0

可能的重複http://stackoverflow.com/questions/11766802/how-to-report-an-error-if-an-item-is-missing-in-sequence-in-a-list-of-lists – 2012-08-02 23:29:08

回答

0
>>> list_1 = [(1, 1), (1, 3), (1, 4), (2, 2), (2, 3)] 
>>> check_list = zip(list_1, list_1[1:]) 
>>> check_list 
[((1, 1), (1, 3)), ((1, 3), (1, 4)), ((1, 4), (2, 2)), ((2, 2), (2, 3))] 
>>> ok = True 
>>> for (i1, j1), (i2, j2) in check_list: 
...  if i1 == i2 and j1 + 1 != j2: 
...   ok = False 
...   break 
...  elif i1 + 1 != i2: #you may also want to check j2 == 1: 
...   ok = False 
...   break 
... 
>>> ok 
False 
+1

縮短你可以簡單地做到這一點:'在(i1,j1),(i2,j2)在check_list' – jamylak 2012-08-03 00:22:08

+0

謝謝,這很酷 – 2012-08-03 00:45:20

0

的itertools爲基礎的方法

>>> from itertools import groupby, izip, count 
>>> from operator import itemgetter 
>>> z = [(1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (3,1), (3,4)] 
>>> z = sorted(z, key=itemgetter(0)) 
>>> z = groupby(z, key=itemgetter(0)) 
>>> bad = [] 
>>> for key, group in z: 
...  z1 = izip((y for (x, y) in group), count(1)) 
...  for (a, b) in z1: 
...    if a != b: 
...     bad.append(key) 
... 
>>> print(set(bad)) 
set([1, 3])