我有一个列表:
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