计算某些项目是否在列表中相邻

时间:2015-11-22 16:19:07

标签: python python-2.7

我有以下列表:

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

我需要找到8,9是否彼此相邻,如果是,则返回它们相邻的实例数。

我最初尝试过

p=(any([8,9] == a[i:i+2] for i in xrange(len(a) - 1)))
    print p

它返回True但我需要检索计数。怎么办呢?

2 个答案:

答案 0 :(得分:1)

这个pythonic解决方案应该为您提供答案,并为列表中唯一的元素对提供所有可能的答案。

from collections import Counter
zipped = Counter(zip(a, a[1:]))
zipped[(8,9)]

答案 1 :(得分:0)

使用any()不会给您计算。它只会告诉您条件是否在给定的可迭代a内的任何位置都为真。

删除any,最终得到一个生成器表达式:

p=( [8,9] == a[i:i+2] for i in xrange(len(a) - 1) )

如果我们将该生成器表达式转换为列表,我们得到:

>>> p = list( [8,9] == a[i:i+2] for i in xrange(len(a) - 1) )
>>> print(p)
[False, False, False, False, False, False, False, True, False, True, False, False, False, True]

要获得最终计数,请调用count的{​​{1}}方法,参数为list(您希望计算True个项目数):

True

或者您可以将您的生成器表达式转换为列表推导,并将条件移动到for循环之后的if语句,该语句仅保留与条件匹配的项目。然后计数是列表的长度:

>>> p.count(True)
3