我想知道是否连续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行和列,j表示需要找到该数量的次数。
答案 0 :(得分:0)
您的代码存在一些问题:
n
参数,您可以使用len(list)
list
用作变量名称,因为它会影响内置list
函数for x in range (n-j)
您假设每个子列表与父列表具有相同数量的元素True
次,您的函数也会返回j
您可以解决此问题,并添加要重复的数字的参数,如其他答案所示。但是,使用循环和条件,结果代码将非常笨拙。
相反,您可以使用any
和itertools.groupby
创建功能。 groupby
组的数字相等,那么您只需检查这些组的len
,看看any
是否足够长,以及它是否是正确的数字any
1}}子列表。
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)
如果True
在任何子列表中连续num
次出现,则会返回count
。
答案 1 :(得分:0)
您的要求不清楚。但是,这将是您的代码的略微修改版本,这将产生我认为您正在寻找的。 p>
目标是您想知道 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
答案 2 :(得分:0)
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
参数。