数値のリストが算術演算であるか、Python を使用していないかを確認する方法を知りたいので、リスト内の各項目の間に共通の数値があるかどうかを考えています。
質問する
6558 次
6 に答える
5
numpy.diff
以下にアクセスできる場合に使用できnumpy
ます。
>>> a = numpy.array(range(1, 15, 2))
>>> numpy.diff(a)
array([2, 2, 2, 2, 2, 2])
だからあなたはすることができます
>>> d = numpy.diff(a)
>>> not numpy.any(d-d[0])
True
またはさらに良い
>>> not numpy.any(numpy.diff(a, 2))
True
于 2012-11-07T19:02:31.957 に答える
5
これは私が書くものです:
all((i - j) == (j - k) for i, j, k in zip(l[:-2], l[1:-1], l[2:]))
違いを一度だけ計算することでおそらくより効率的にすることができますが、効率が心配な場合は、numpy を使用して次のように記述します。
np.all((a[:-2] - a[1:-1]) == (a[1:-1] - a[2:]))
または(スライスを保存する):
np.all(a[:-2] + a[2:] == 2 * a[1:-1])
リストを numpy 配列に自動的に変換するため、おそらく最も簡潔な方法は numpy.diff を使用することです。
np.all(np.diff(l, 2) == 0)
于 2012-11-07T18:56:59.100 に答える
1
一連の数値のように等差数列を意味し、各数値が前の数値に一定量を加えたものに単純に等しい場合([1, 3, 5, 7]
またはなど)、おそらくそれを考えすぎないでください[8, 18, 28, 38]
。リスト内包表記がこれを上回る可能性は低いです。[1, 2, 4, 8]
[1, 3, 1, 5, 1, 7]
def is_arithmetic(l):
delta = l[1] - l[0]
for index in range(len(l) - 1):
if not (l[index + 1] - l[index] == delta):
return False
return True
于 2012-11-07T19:06:48.880 に答える
1
差を1回だけ計算するソリューションは次のとおりです。
from itertools import izip
def is_arithmetic(seq):
gen = (i - j for i, j in izip(seq[:-1], seq[1:]))
diff = next(gen, None) # get the first element in the generator
return all(d == diff for d in gen) # check all the others are equal to it
またはもっと不可解に:
def is_arithmetic(seq):
gen = (i - j for i, j in izip(seq[:-1], seq[1:]))
return all(d == d0 for d in gen for d0 in gen) # wat
于 2012-11-07T19:07:48.783 に答える
1
リスト内のすべての相違点のセットの長さを調べてみてはどうですか?
>>> alist = [3,9,15,21,27,33,39,45,51,57]
>>> blist = [-7, -2, 3, 8, 13, 18, 23, 29]
>>> 1 == len(set([alist[x + 1] - alist[x] for x in range(len(alist) - 1)]))
True
>>> 1 == len(set([blist[x + 1] - blist[x] for x in range(len(blist) - 1)]))
False
>>>
于 2012-11-07T19:59:31.203 に答える
0
def check_arith(lst):
l1 = len(lst) - 1
n= 2
dif = lst[1] - lst[0]
while(n<l1):
if (lst[n+1] - lst[n]) != dif:
return False
else:
n = n + 1
return True
print(check_arith([5,10,15, 20, 25]))
于 2014-01-05T01:36:01.210 に答える