Python 如果列表中的某些项目相邻,则计数
我有以下清单:Python 如果列表中的某些项目相邻,则计数,python,python-2.7,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,但我需要检索计数。如何做到这一点?这个pythonic解决方案应该为您提供答案,并为列表中唯一的元素对提供所有可能的答案 from collections import Counter zi
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
,但我需要检索计数。如何做到这一点?这个pythonic解决方案应该为您提供答案,并为列表中唯一的元素对提供所有可能的答案
from collections import Counter
zipped = Counter(zip(a, a[1:]))
zipped[(8,9)]
使用不会给你一个计数。它只告诉您条件在给定iterablea
中的任何位置是否为真
删除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]
要获取最终计数,请调用参数为True
的count
方法list
(您需要True
项的计数):
或者,您可以将生成器表达式转换为列表理解,并将条件移动到for循环之后的if语句中,该循环只保留与条件匹配的项。然后,计数是列表的长度:
>>> a = [1,2,3,4,5,6,7,8,9,8,9,4,5,8,9]
>>> pairs = [True for i in xrange(len(a) - 1) if [8,9] == a[i:i+2]]
>>> pairs
[True, True, True]
>>> print(len(pairs))
3
欢迎来到堆栈溢出!看起来你想让我们为你写些代码。虽然许多用户愿意为陷入困境的程序员编写代码,但他们通常只在海报已经试图自己解决问题时才提供帮助。演示这项工作的一个好方法是,包括您迄今为止编写的代码、示例输入(如果有)、预期输出和实际获得的输出(控制台输出、堆栈跟踪、编译器错误——任何适用的)。您提供的详细信息越多,您可能会收到的答案就越多
>>> a = [1,2,3,4,5,6,7,8,9,8,9,4,5,8,9]
>>> pairs = [True for i in xrange(len(a) - 1) if [8,9] == a[i:i+2]]
>>> pairs
[True, True, True]
>>> print(len(pairs))
3