我有以下列表:
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
但我需要检索计数。怎么办呢?
答案 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