如何从嵌套列表创建列?

时间:2017-06-15 03:15:27

标签: python python-2.7

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检查它感到困惑? / p>

1 个答案:

答案 0 :(得分:0)

为了获取列表列表的 i -th列,您可以使用 list comprehension

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