[英]Check list lst if it's a geometric sequence in python
我有,
def geometric(lst):
'checks whether the integers in list lst form a geometric sequence'
for i in range(1, len(lst) - 1):
if lst[i] * 2 == "don't know what to check here":
return True
else:
return False
我不确定如何将其应用于检查所有索引。 宁愿在for循环中完成此操作。 任何帮助,将不胜感激!
我认为这可行:
def geometric(lst):
for i in range(len(lst) - 2):
if lst[i] * lst[i + 2] != lst[i + 1] ** 2:
return False
return True
这是基于以下想法:对于任何三个连续项a, b, c
,前两个之比必须等于后两个之比,即b/a = c/b
。 重新排列得到a * c == b ** 2
。 不使用除法的形式要好得多,因为除法会引入舍入误差。 如果公用比率不是整数(例如[4, 6, 9]
) [4, 6, 9]
则此功能甚至有效。
编辑
上面的答案不能正确处理包含0
列表。
正确的版本是:
def geometric(lst):
for i in range(len(lst) - 2):
if lst[i] * lst[i + 2] != lst[i + 1] ** 2:
return False
for i in range(len(lst) - 1):
if lst[i] == 0 and lst[i + 1] != 0:
return False
return True
对于[1, 0, 0]
(公共比率0
) [1, 0, 0]
它返回True
,但对于[0, 0, 1]
False
[1, 0, 0]
返回False
。 原始版本均返回True
。
最好禁止公共比率0
。 这将意味着更改第二个循环,以对长度为2
或更大且包含0
任何列表返回False
。
如sam2090所指出的,第4行中条件的右侧为空。 如果几何序列的公共比例为2(也许您实际上希望将其作为函数的参数传递),则表达式应为:
if lst[i] == lst[i-1] * 2
语句的左侧引用迭代(i)中的当前数字,而语句的右侧引用之前的数字(i-1),并将其值乘以2。
另外,在foor
循环中,请确保您进行迭代直到列表中的最后一个元素,因此您应该编写:
for i in range(1, len(lst)):
并不是
for i in range(1, len(lst) - 1):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.