验证算术序列python

Bel*_*ish 4 python math verify sequence

我只是想知道如何使用python来验证数字列表是否是算术运算,因此列表中的每个项目之间是否存在公共数字.

eca*_*mur 5

这就是我写的:

all((i - j) == (j - k) for i, j, k in zip(l[:-2], l[1:-1], l[2:]))
Run Code Online (Sandbox Code Playgroud)

你可以通过只计算一次差异来提高效率,但如果你关注效率,你会使用numpy并写:

np.all((a[:-2] - a[1:-1]) == (a[1:-1] - a[2:]))
Run Code Online (Sandbox Code Playgroud)

甚至(保存切片):

np.all(a[:-2] + a[2:] == 2 * a[1:-1])
Run Code Online (Sandbox Code Playgroud)

可能最简洁的方法是使用numpy.diff,因为它会自动将列表转换为numpy数组:

np.all(np.diff(l, 2) == 0)
Run Code Online (Sandbox Code Playgroud)


Lev*_*sky 5

numpy.diff如果您有权访问,则可以使用numpy:

>>> a = numpy.array(range(1, 15, 2))
>>> numpy.diff(a)
array([2, 2, 2, 2, 2, 2])
Run Code Online (Sandbox Code Playgroud)

所以你可以做到

>>> d = numpy.diff(a)
>>> not numpy.any(d-d[0])
True
Run Code Online (Sandbox Code Playgroud)

甚至更好

>>> not numpy.any(numpy.diff(a, 2))
True
Run Code Online (Sandbox Code Playgroud)