检查是否在2d lis中连续x次找到一个数字

2024-04-29 03:59:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道一个列表中的一个数字是否连续被发现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表示需要查找的次数。你知道吗


Tags: 函数intrue列表for参数returnif
3条回答

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

目标是您想知道是否有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参数,您可以使用len(list)获得列表的大小
  • 您不应该使用list作为变量名,因为它隐藏了内置的list函数
  • for x in range (n-j)中,假设每个子列表的元素数与父列表的元素数相同
  • 如果数字在一行中出现的次数超过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(nums,j,target):
    for row in nums:  # get each row
        counter = 0 
        for i in row:  # get each number 
            if i != target:  # check if some other number was gotten
                if counter == j:
                    return True
                counter = 0  # reset counter
                continue
            counter += 1
        if counter == j:
            return True
    return False

不需要n参数。你知道吗

相关问题 更多 >