Python 如何返回给定n和一个可数的n个连续整数集?
例如,调用Python 如何返回给定n和一个可数的n个连续整数集?,python,loops,python-3.x,while-loop,iteration,Python,Loops,Python 3.x,While Loop,Iteration,例如,调用conce(2[2,2,3,9,9,10,1,6,6])返回{2,9,6}。我不能在itertools中使用任何东西,我只能使用next和iter并且我不能创建二级列表来跟踪值或使用len 以下是我目前掌握的情况: consec(n,iterable): result = set() count = 0 y = iter(iterable) j = iter(iterable) next(j) try: while True: for x in y:
conce(2[2,2,3,9,9,10,1,6,6])
返回{2,9,6}
。我不能在itertools
中使用任何东西,我只能使用next
和iter
并且我不能创建二级列表来跟踪值或使用len
以下是我目前掌握的情况:
consec(n,iterable):
result = set()
count = 0
y = iter(iterable)
j = iter(iterable)
next(j)
try:
while True:
for x in y:
if x in result:
continue
for m in range(n):
if x == next(j):
count += 1
if count == n-1:
result.add(x)
else:
count = 0
break
except StopIteration:
return result
以递归方式执行:
GlobalCons = 2
def recurse(list, previous, consecCount):
if(list == []):
return []
if(consecCount != GlobalCons and previous == list[0]):
return recurse(list[1:], list[0], consecCount + 1)
if(consecCount == GlobalCons previous == list[0]):
return [previous] + recurse(list[1:], list[0], consecCount + 1)
else:
return recurse(list[1:], list[0], 1)
您可以使用:
例如:
>>> consec(2, [2, 2, 3, 9, 9, 10, 1, 6, 6])
[2, 9, 6]
编辑:哎呀,我想我读到“我不能在itertools中使用任何东西”是“我在itertools中找不到我可以使用的东西”,但你可能是说“我不允许”。不管怎样,我将把这个留给那些可以使用
itertools
..的人,通过一个简单的for
循环遍历iterable中的值应该很容易做到这一点。只需计算您在一行中看到当前值的次数,当它达到n
时,将其添加到结果中:
def consec(n, iterable):
result = set()
prev = None # use object() here instead if None could be a value in the iterable
count = 0
for item in iterable:
if item == prev:
count += 1
if count == n:
result.add(prev)
else:
prev = item
count = 1
return result
我不想费心避免重复计算相同的值,因为集合
将忽略添加到其中的任何重复值
如果出于某种原因需要使用while
循环,则始终可以将for
循环转换为一个循环
用于循环的:
for item in iterable:
stuff(item)
几乎相当于:
it = iter(iterable)
try:
while True:
item = next(it)
stuff(item)
except StopIteration:
del it
这两个版本之间的唯一区别是迭代期间存在it
变量。(循环的使用的迭代器从不绑定到变量名。)
或者使用范围和索引而不是切片:
def consec(n,l):
return set(ele for i, ele in enumerate(l[:-n+1]) if all(ele == l[j] for j in range(i,i+n)))
如果必须使用next,请使用范围为n-1的内部循环,查看所有next n-1和prev是否相等,如果循环完成,则添加到集合中:
def consec(n,l):
it = iter(l)
prev = next(it)
st = set()
while prev != "":
for i in range(n-1):
ele = next(it,"")
if ele != prev or ele == "":
break
prev = ele
else:
st.add(ele)
prev = ele
return st
def consec(n,l):
return set(ele for i, ele in enumerate(l[:-n+1]) if all(ele == l[j] for j in range(i,i+n)))
def consec(n,l):
it = iter(l)
prev = next(it)
st = set()
while prev != "":
for i in range(n-1):
ele = next(it,"")
if ele != prev or ele == "":
break
prev = ele
else:
st.add(ele)
prev = ele
return st