Python 如何为嵌套列表中的每一行运行函数?

Python 如何为嵌套列表中的每一行运行函数?,python,python-2.7,list,validation,Python,Python 2.7,List,Validation,我是Python新手,正在尝试编写代码来检查嵌套列表是否有一组有效的数字。每行和每列都必须有效。我编写了一个名为check_sequence的函数,用于验证列表是否有一组有效的数字。如何从另一个函数调用该函数来检查该行是否有效?例如,我需要这样的内容来检查行: check_sequence(list): checks if list is valid check_rows(list): For each of the rows in the nested list call check

我是Python新手,正在尝试编写代码来检查嵌套列表是否有一组有效的数字。每行和每列都必须有效。我编写了一个名为check_sequence的函数,用于验证列表是否有一组有效的数字。如何从另一个函数调用该函数来检查该行是否有效?例如,我需要这样的内容来检查行:

check_sequence(list):
  checks if list is valid

check_rows(list):
  For each of the rows in the nested list call check_sequence
以下是我的检查顺序代码:

def check_sequence(mylist):
    pos = 0
    sequence_counter = 1
    while pos < len(mylist):
        print "The pos is: " + " " + str(pos)
        print "The sequence_counter is:" + " " + str(sequence_counter)
        for number in mylist:
            print "The number is:" + " " + str(number)
            if number == sequence_counter:
                sequence_counter = sequence_counter + 1
                pos = pos + 1
                break
            else:
                # if list is at the last position on the last item
                if sequence_counter not in mylist:
                    print "The pos is:" + " " + str(pos) + " and the last position is:"  + " "  + str(mylist[len(mylist) - 1])
                    print "False"
                    return False
    print "True"
    return True

您正在寻找迭代for循环吗

 check_sequence(list):
    #your check here

 check_rows(list):
     for row in list:
         if not check_sequence(row):
             return False
     return True

您正在寻找迭代for循环吗

 check_sequence(list):
    #your check here

 check_rows(list):
     for row in list:
         if not check_sequence(row):
             return False
     return True
如果嵌套列表是面向行的(行是最低维度),则可以简单地使用:

check_rows(list):
    return all(check_sequence(sublist) for sublist in list)
zip(*..)
转换了
列表
,我们使用
list(..)
来确保
检查序列(..)
仍在使用列表(如果任何iterable足够,则可以省略
列表(..)
部分。

鉴于嵌套列表是面向行的(行是最低维度),你只需使用:

check_rows(list):
    return all(check_sequence(sublist) for sublist in list)

zip(*..)
转换了
列表
,我们使用
list(..)
来确保
检查序列(..)
仍在使用列表(如果任何iterable足够,则可以省略
列表(..)
部分。

这里有一个解决方案可以用于任意二维列表

l = [[1,2,3],[1,2],[1,4,5,6,7]]
try:
    if len([1 for x in reduce(lambda x, y :x + y, l) if type(x) != type(0)]) > 0:
        raise Exception

catch Exception:
   pass # error, do something 

直观的做法是将列表展平,然后依次检查其类型是否为
int

以下是一个适用于任意二维列表的解决方案

l = [[1,2,3],[1,2],[1,4,5,6,7]]
try:
    if len([1 for x in reduce(lambda x, y :x + y, l) if type(x) != type(0)]) > 0:
        raise Exception

catch Exception:
   pass # error, do something 

直觉是将列表展平,然后依次检查其类型是否为
int

您必须在两个函数中分离,并认为第一个函数将返回对另一个函数的每个值的完整检查:

def check_sequence(lis):
  ret = True
  for row in lis:
    ret = ret and check_rows(row)
  return ret

def check_rows(row):
  ret = True
  for elem in row:
    pass #do your checking
  return ret
一个具体的例子可以是:

l = [[1,2,3],[1,2],[1,4,5,6,7]]
def check_sequence(lis):
  ret = True
  for row in lis:
    ret = ret and check_rows(row)
  return ret

def check_rows(row):
  return 1 in row #ask if 1 belongs to the list

check_sequence(l) ---> True
check_sequence([[1],[2,3]]) ---> False

您必须在两个函数中分离,并认为第一个函数将返回另一个函数的每个值的完整检查:

def check_sequence(lis):
  ret = True
  for row in lis:
    ret = ret and check_rows(row)
  return ret

def check_rows(row):
  ret = True
  for elem in row:
    pass #do your checking
  return ret
一个具体的例子可以是:

l = [[1,2,3],[1,2],[1,4,5,6,7]]
def check_sequence(lis):
  ret = True
  for row in lis:
    ret = ret and check_rows(row)
  return ret

def check_rows(row):
  return 1 in row #ask if 1 belongs to the list

check_sequence(l) ---> True
check_sequence([[1],[2,3]]) ---> False



列表没有“行”和“列”。请尽量精确。如果您可以添加一些代码来构造嵌套列表的示例,则答案更可能正确direction@JoeP我添加了更多的代码。嗯,我还是不明白你想要实现什么,你能用文字表达吗?还有一个输入示例列表,你希望输出结果如何?这将非常有帮助!@DaMianattenero好的一个示例列表如下:
[[1,2,3],[2,3,1],[3,1,2]]
如果数字1到n在行和列中出现一次,输出将返回True,如果不出现,输出将返回False。因此,我正在检查数独方块是否有效(不确定是否玩游戏)。列表没有“行”和“列”。请尽量精确。如果您可以添加一些代码来构造嵌套列表的示例,则答案更可能正确direction@JoeP我添加了更多的代码。嗯,我还是不明白你想要实现什么,你能用文字表达吗?还有一个输入示例列表,你希望输出结果如何?这将非常有帮助!@DaMianattenero好的一个示例列表是这样的:
[[1,2,3],[2,3,1],[3,1,2]]
如果数字1到n在行和列中出现一次,输出将返回True,如果不出现,输出将返回False。因此,我正在检查数独方块是否有效(不确定是否玩游戏)@WillemVanOnsem谢谢。我只想返回True或False。OP从未真正指定需要返回的内容。我只是展示了迭代for循环的实现以及编辑为添加的程序流returns@WillemVanOnsem谢谢。我只想返回True或False。OP从未真正指定需要返回的内容。我作为仅仅展示一个迭代for循环的实现和添加returns的程序流,我认为这很好,很完美,但是对于一个刚开始的人来说,有很多东西需要接受!你不觉得吗?但是,再加上一个伟大的答案,我认为这很好,很完美,但是对于一个刚开始的人来说,有很多东西需要接受!你不觉得吗nk?但是,再加上一个就好了answer@WillemVanOnsem我只是提供了一个不需要使用函数就可以检查有效性的替代解决方案……我做了一些编辑。@Shiva哇……这是对函数的理解!还有一个,非常喜欢,但是对于一个刚开始的人来说,你不觉得这很值得接受吗?@DamianLattenero我同意。已经有一些很好的答案涵盖了基础知识。我想给那些正在寻找一个更具Python风格的解决方案的人一个答案@湿婆:这是一种很酷的展示方式,有不止一点的感觉是很好的view@WillemVanOnsem我只是提供了一个替代的解决方案来检查有效性,而不需要使用函数…我做了一些编辑。@Shiva哇…这是对函数的理解!还有一个,非常喜欢,但是对于刚开始的人来说,再一次n、 你不认为这有很多可以接受的吗?@Damianaltenero我同意。已经有很好的答案涵盖了基础知识。我想给那些寻求更具Python风格的解决方案来解决同样问题的人一个答案。:@Shiva这是你展示的一个很酷的方式,在check_行中有多个视点是很好的,在check_行中有
的元素:
当我传入check_sequence函数之后,它会只检查该元素还是整行?@johnewbie25 in check_行,我的坏名字,只检查一行,这意味着,是一个简单的元素列表,就像[1,2,3],你明白吗?@johnnewbie25我可以用一个例子更新答案,例如,检查每一行是否有数字“1”,这样你就可以看到,然后做你的案例,但更好的是,你能在问题中添加什么是你的列表,或类似的列表,以及你的预期结果吗?@johnnewbie25我也更新了答案,看看它是否有帮助,我想我们越来越近了。我遇到的问题是,我不知道如何在代码中表达如何使用我在o中发布的check_sequence方法