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