繁体   English   中英

检查列表lst是否是python中的几何序列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM