python - 函数返回列表中有多少个整数元素是同一列表中其他元素的精确平方
问题描述
任务:
编写一个 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,我认为逻辑是正确的。
解决方案
该运算符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 == 1
并False == 0
使用sum
并获得有效的O(n)算法。
def count(x):
x_set = set(x)
return sum(i*i in x_set for i in x)
推荐阅读
- javascript - 将嵌套数组转换为对象数组问题
- java - 如何从服务器检索特定的 Web 服务响应
- javascript - JS - 财富之轮
- java - 将 Jbutton 与 ArrayList 的对象值相关联。摇摆
- laravel - Laravel 5如何检查密码重置令牌是否存在于密码重置中
- reactjs - 具有静态成员组件的 React 类的正确类型定义
- javascript - Babel 7 是否符合 ES 模块规范?
- c++ - C++:简单的四阶龙格-库塔计算器
- java - 如何使用 Apache POI 将 altChunk 元素添加到 XWPFDocument
- java - 将密码验证变成一个类