2012-08-02 54 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])