我有一個列表:數字模式匹配
a = [1, 2, 4, 5, 8, 2, 4, 2, 4, 6, 7]
我想算2, 4
多少次一起出現
(2 at index i and 4 at index i+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).
我怎麼能這樣做?
爲了做到這一點,你需要檢查給定列表中的每一對,看看這對包含2
和4
。在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
),將它們解壓縮到變量(i
和j
)並測試我們的情況(一個等於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
提供一個值列表,並將它們總和爲單個值;幸運的是,在Python
,True
作爲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
解決方案。
將列表加入字符串並搜索'24'
。
>>> a = [1, 2, 4, 5, 8, 2, 4, 2, 4, 6, 7]
>>> ''.join(map(str, a)).count('24')
3
令人驚歎的,這工作!謝謝吉姆! – user6837684