循环给出多个布尔值

loop giving multiple boolean values

嗨,我有这个问题

这是我的代码

for i in range(len(nums)):
for j in range(i+1, len(nums)):
    if nums[i] == nums[j]:
       if abs(i - j) <= k:
           print(True)

我想添加功能或选项,如果

if abs(i - j) <= k:
           print(True)

condition 没有任何值 true 它只是 return false once

我试过了,但是它 return 有多个布尔值

nums = [1,2,3,1]

k=3

for i in range(len(nums)):
   for j in range(i+1, len(nums)):
       if nums[i] == nums[j]:
          if abs(i - j) <= k:
              print(True)
   else:
       print(False)
           

让它成为一个函数并使用return跳出函数(两个循环)

def distictIndices(nums,k):
   for i in range(len(nums)):
       for j in range(i+1, len(nums)):
           if nums[i] == nums[j] and abs(i - j) <= k:
              reutrn True
   return False

nums = [1,2,3,1]
k=3

print(distictIndices(nums,k))
           

一种更好的(线性)方法也证明了早期 return:

def func(nums, k):
    lastseen = {}
    for i, num in enumerate(nums):
        if num in lastseen and i - lastseen[num] <= k:
            return True  # ends function
        lastseen[num] = i
    return False

>>> func([1,2,3,1], 3)
True
>>> func([1,2,3,4,1], 3)
False

或者,使用常量额外 space:

from collections import deque

def func(nums, k):
    q = deque(maxlen=k)
    for num in nums:
        if num in q:
            return True
        q.append(num)
    return False