首页 > 解决方案 > 函数返回列表中有多少个整数元素是同一列表中其他元素的精确平方

问题描述

任务:

编写一个 Python 函数,返回列表中有多少整数元素是同一列表中其他元素的平方。假设列表不包含负数并且没有重复项。

此函数接受一个列表并返回计数。例如,如果 x 为 [3,4,0,2,1,9,25],则 sum 返回 4,因为 3*3=9 , 0*0=0 , 1*1=1 , 2*2=4。

这是我的代码:

x = [3,4,0,2,1,9,25]
def count(x):
    sum = 0
    for i in x:
       if i*i in x is True:
            sum += 1
    return sum

当我运行 count(x) 时,输出是 0 而不是 4,我认为逻辑是正确的。

标签: python

解决方案


该运算符is是一个比较运算符,因此当您这样做时i*i in x is True,Python 将其解释为i*i in x and x is True. 在那种情况下x is True总是错误的。

请注意,您不需要明确将值与 进行比较True,因为in它返回一个布尔值。

x = [3,4,0,2,1,9,25]
def count(x):
    sum = 0
    for i in x:
       if i*i in x: # Simply remove 'is True'
            sum += 1
    return sum

虽然,由于列表查找,上述是O(n 2 ) 。您可以使用set恒定时间查找并使用事实,True == 1False == 0使用sum并获得有效的O(n)算法。

def count(x):
    x_set = set(x)
    return sum(i*i in x_set for i in x)

推荐阅读