【问题标题】:loop giving multiple boolean values循环给出多个布尔值
【发布时间】:2021-10-11 08:30:45
【问题描述】:

你好,我有这个问题

这是我的代码

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)

条件没有任何值 true 它只返回一次 false

我试过了,但它返回多个布尔值

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 语句而不是 print 都会立即结束函数。

标签: python python-3.x python-2.7


【解决方案1】:

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

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

或者,使用恒定的额外空间:

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

【讨论】:

    【解决方案2】:

    使其成为一个函数并使用 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))
               
    

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 2018-12-13
      • 2017-11-20
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      相关资源
      最近更新 更多