2017-06-15 129 views
0

Python新手在这里。我验证的行和列在一个正方形,由一个嵌套列表类似下面表示:如何从嵌套列表创建列?

[[1,2,3], 
[2,3,1] 
[3,1,2]] 

的行和列是有效的,如果他们出现1〜n次只有一次。因此,例如,如果嵌套列表的长度为3,则数字1,2和3应在所有行中出现一次,并在所有列中出现一次,以使其有效。我正在检查行并了解它是如何工作的。下面,我已经定义了一个方法叫做check_sequence进行检查,看是否为1到n出现在列表中只有一次,get_rows方法获取列表中的所有行并检查它们对check_sequence:

def check_sequence(mylist): 
    for x in range(1, len(mylist)+1): 
     print "x:" + ' ' + str(x) 
     if x not in mylist: 
      print "False" 
      return False 
     else: 
      print "True" 


def check_row(mylist): 
    for row in mylist: 
     print row 
     if check_sequence(row) is False: 
      print "This is False" 
      return False 
    print "This is True" 
    return True 

什么我不不明白的是如何使用for循环检查广场中的列。因此,例如,如果我们有与上述相同的方:

[[1,2,3], 
[2,3,1] 
[3,1,2]] 

第一列包含1,2和3,第二列包含2,3和1。我很困惑,我将如何收集这些数字在一个列中,并检查他们对我的方法check_sequence?

回答

0

为了获得一个列表的列表的i列处,你可以使用列表理解

column_i = [ row[i] for row in matrix ] 

所以,那么你的检查代码应该是:

def check_row(mylist): 
    for row in mylist: 
     print row 
     if check_sequence(row) is False: 
      print "This is False" 
      return False 
    for i in len(mylist): print row if check_sequence([ row[i] for row in mylist ]) is False: print "This is False" return False 
    print "This is True" 
    return True

不过,您也可以使用zip(..)将列表转换为元组列表:

def check_row(mylist): 
    for row in mylist: 
     print row 
     if check_sequence(row) is False: 
      print "This is False" 
      return False 
    for col in zip(*mylist): print col if check_sequence(col) is False: print "This is False" return False 
    print "This is True" 
    return True
+0

谢谢你的解决方案! – johnnewbie25