数字模式匹配

时间:2016-09-16 02:27:43

标签: python python-3.x indexing

我有一个清单:

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 个答案:

答案 0 :(得分: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提供值列表,并将它们汇总到一个值;幸运的是,在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

答案 1 :(得分:0)

将列表加入字符串并搜索'24'

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