我只是想知道如何檢查,以確認一個數字列表是算術或不使用Python,所以無論列表中的每個項目之間是否有一個共同的數字。驗證算術序列python
回答
這是我會寫:
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.diff,因爲它會自動轉換列表爲numpy的數組:
np.all(np.diff(l, 2) == 0)
您可以使用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
像高階差異一樣,我已經忘記了! – ecatmur
嘿,不幸的是,我沒有訪問numpy :(很好的回答,雖然:) –
如果你的意思是一系列數字中的算術序列,每個數字只是等於前一個加上一些常量(如[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
列表理解會更糟糕,因爲它會產生一個列表然後扔掉(就像你調用'範圍')。但是,這些答案都不是列表解析 - 它們是生成器理解。 – Eric
這裏有一個解決方案,只計算差值一次:
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
關於檢查長什麼列表中所有差異的集合?
>>> 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
>>>
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]))
- 1. 驗證算術公式
- 2. 算術序列檢查
- 3. VB上的算術測驗
- 4. ASP .net驗證技術
- 5. python鏈接驗證程序
- 6. Python密碼驗證程序
- 7. Python中的程序驗證
- 8. Haskell算術序列的識別
- 9. 8085算術程序
- 10. Python計算器 - 輸入驗證
- 11. Python二進制算術
- 12. python ctypes指針算術
- 13. Python的類實例算術
- 14. Python的函數算術庫
- 15. Python的優化算術
- 16. 驗證與直列驗證方法和驗證程序類
- 17. Python驗證 - 現場驗證
- 18. Python 3 - 計算一個散列/ checkdigit /等。以驗證哪個程序被使用
- 19. 在Python中嵌套列表的算術運算
- 20. Python中列表/元組的算術運算符?
- 21. 的Python的eval表達式算術運算符所有排列
- 22. javascript驗證算術表達式的正則表達式
- 23. 信用卡驗證 - 技術上正確但錯誤w /算法?
- 24. 經常用於驗證算術表達式
- 25. Python 3:基本算術運算
- 26. Python的功能設計,算術運算
- 27. jquery序列化前驗證
- 28. Oracle序列字段驗證
- 29. JQuery表單驗證序列
- 30. 反序列化驗證
非常完美謝謝! –