2016-09-16 67 views
1

我有一個列表:數字模式匹配

a = [1, 2, 4, 5, 8, 2, 4, 2, 4, 6, 7] 

我想算2, 4多少次一起出現

(2 at index i and 4 at index i+1). 

我怎麼能這樣做?

回答

0

爲了做到這一點,你需要檢查給定列表中的每一對,看看這對包含24。在Python中,您可以使用zip內置函數創建對。

爲了創建相鄰對,我們提供的列表a作爲第一個參數,以zip同一列表一個位置向前:

list(zip(a, a[1:])) # a[1:] is [2, 4, 5, 8, 2, 4, 2, 4, 6, 7] 

這產生以下形式的雙:

[(1, 2), (2, 4), (4, 5), (5, 8), (8, 2), (2, 4), ...] 

現在,我們可以做的是迭代通過這些對(使用for),將它們解壓縮到變量(ij)並測試我們的情況(一個等於2,另一個等於4)。這看起來是這樣的:

[i == 2 and j == 4 for i, j in zip(a, a[1:])] 

這將創建True/False項爲成功和失敗,我們設定的條件對列表:

[False, True, False, False, False, True, False, True, False, False] 

這裏就是另一個內置功能就派上用場了,sum()。您可以爲sum提供一個值列表,並將它們總和爲單個值;幸運的是,在PythonTrue作爲1處理,使sum可以輕鬆地總結一下,找到一個結果,如果我們提供我們先前創建的列表:

sum(i == 2 and j == 4 for i,j in zip(a, a[1:])) 

這樣做有助於我們達到3最終結果。

在程序方式這可以翻譯爲:

count = 0 
for i,j in zip(a, a[1:]): 
    if i == 2 and j == 4: 
     count += 1 
print(count) 

這再次產生3一樣的sum解決方案。

+0

令人驚歎的,這工作!謝謝吉姆! – user6837684

0

將列表加入字符串並搜索'24'

>>> a = [1, 2, 4, 5, 8, 2, 4, 2, 4, 6, 7] 
>>> ''.join(map(str, a)).count('24') 
3