Python 检查是否在2d列表中连续x次找到某个数字
我想知道列表中的一个数字是否连续出现j次,这是我的列表: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
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很高兴它起作用。如果您认为我的回答能正确解决您的问题,我建议您将此标记为已接受的答案。