Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查是否在2d列表中连续x次找到某个数字_Python_Python 3.x - Fatal编程技术网

Python 检查是否在2d列表中连续x次找到某个数字

Python 检查是否在2d列表中连续x次找到某个数字,python,python-3.x,Python,Python 3.x,我想知道列表中的一个数字是否连续出现j次,这是我的列表: list=[[1, 1, 1,1], [0, 0, 0,0], [2, 2, 2,2] [2, 2, 2,2]] 这就是我写的: def alignment(list,n,j): for y in range (n): for x in range (n-j): counter = 0 for z in range(j): if list

我想知道列表中的一个数字是否连续出现j次,这是我的列表:

list=[[1, 1, 1,1],
      [0, 0, 0,0],
      [2, 2, 2,2]
      [2, 2, 2,2]]
这就是我写的:

def alignment(list,n,j):
for y in range (n):
    for x in range (n-j):
        counter = 0
        for z in range(j):
            if list[y][x]== list[y][x+z]:
                counter+=1
            if counter == j :
                return True
但是这个函数将检查是否连续找到任何数字,我想给这个函数添加另一个参数,这样我就可以指定要在列表中查找的数字。
n表示有n行和n列,j表示需要查找的数字的次数。

您的代码存在一些问题:

  • 不需要
    n
    参数,您可以使用
    len(list)
  • 您不应该使用
    list
    作为变量名,因为它会隐藏内置的
    list
    函数
  • 使用范围(n-j)中x的
    假设每个子列表的元素数与父列表的元素数相同
  • 如果数字在一行中出现的次数超过
    j
    次,则函数也会返回
    True
  • 通过使用三个循环而不是两个循环,您正在做大量的双重工作
您可以修复此问题,还可以为要重复的数字添加参数,如其他答案所示。但是,仅使用循环和条件,生成的代码将非常笨拙

相反,您可以使用
any
和创建所描述的函数
groupby
将相等的数字分组,然后您只需检查这些组的
len
,查看
any
是否足够长,以及它是否是子列表的
any
的正确数字

def alignment(lst, num, count):
    return any(any(n == num and len(list(g)) == count 
                   for n, g in itertools.groupby(l)) 
               for l in lst)

如果
num
在任何子列表中连续出现
count
次,则返回
True

您的代码存在一些问题:

def alignment(lst, num, count):
    return any(any(n == num and len(list(g)) == count 
                   for n, g in itertools.groupby(l)) 
               for l in lst)
  • 不需要
    n
    参数,您可以使用
    len(list)
  • 您不应该使用
    list
    作为变量名,因为它会隐藏内置的
    list
    函数
  • 使用范围(n-j)中x的
    假设每个子列表的元素数与父列表的元素数相同
  • 如果数字在一行中出现的次数超过
    j
    次,则函数也会返回
    True
  • 通过使用三个循环而不是两个循环,您正在做大量的双重工作
您可以修复此问题,还可以为要重复的数字添加参数,如其他答案所示。但是,仅使用循环和条件,生成的代码将非常笨拙

相反,您可以使用
any
和创建所描述的函数
groupby
将相等的数字分组,然后您只需检查这些组的
len
,查看
any
是否足够长,以及它是否是子列表的
any
的正确数字

def alignment(lst, num, count):
    return any(any(n == num and len(list(g)) == count 
                   for n, g in itertools.groupby(l)) 
               for l in lst)

如果
num
在任何子列表中连续出现
count
次,则返回
True

您的要求不清楚。然而,这将是一个稍微修改的代码版本,它将产生我相信您正在寻找的东西

def alignment(lst, num, count):
    return any(any(n == num and len(list(g)) == count 
                   for n, g in itertools.groupby(l)) 
               for l in lst)
target是您想知道是否有j连续条目的数字

def alignment(list,n,j,target):
    for y in range (n):
        for x in range (n-j):
            counter = 0
            if list[y][x] == target:
                for z in range(j):
                    if list[y][x]== list[y][x+z]:
                        counter+=1
                    if counter == j :
                        return True

你的要求不清楚。然而,这将是一个稍微修改的代码版本,它将产生我相信您正在寻找的东西

target是您想知道是否有j连续条目的数字

def alignment(list,n,j,target):
    for y in range (n):
        for x in range (n-j):
            counter = 0
            if list[y][x] == target:
                for z in range(j):
                    if list[y][x]== list[y][x+z]:
                        counter+=1
                    if counter == j :
                        return True
不需要
n
参数


无需使用
n
参数。

要在此函数中添加另一个参数-好的,您尝试了哪些参数,哪些参数不起作用?为什么有2d列表?预期的结果是什么?是否要分别检查每个子列表是否按顺序包含数字x n次?@timgeb是的,这正是我想做的。另外,至少n次,或者正好n次?参数
n
j
的含义是什么?是否要向此函数添加另一个参数-好的,您尝试了什么,什么不起作用?为什么你有一个2d列表?预期的结果是什么?是否要分别检查每个子列表是否包含数字x n次序列?@timgeb是的,这正是我想做的。而且,至少n次,或者正好n次?参数
n
j
的含义是什么?@anantary这正是我想要的,但在测试之后,它似乎没有检查每个子列表中的最后一个数字。@jumanji很高兴它起了作用。如果您认为我的回答能正确解决您的问题,我建议您将此标记为已接受的答案。@anantary这正是我想要的,但经过测试后,它似乎没有检查每个子列表中的最后一个数字。@jumanji很高兴它起作用。如果您认为我的回答能正确解决您的问题,我建议您将此标记为已接受的答案。