[英]Python count change in list for specific text
我试图弄清楚如何计算列表中状态或字符串的变化。 例如,这是一个列表...
ABC ABC ABC xyz xyz xyz ABC ABC xyz ABC
我想记下从ABC到xyz的变化。 因此,对于此示例,当从ABC更改为xyz两次时,计数将为2。
谢谢。
为此使用str.count 。 如果必须在列表中的xyz
之前计算ABC
,则可以将其加入并应用str.count方法:
abc_list = ['ABC', 'ABC', 'ABC', 'xyz', 'xyz', 'xyz', 'ABC', 'ABC', 'xyz' 'ABC']
abc_string = ''.join(abc_list)
print abc_string.count('ABCxyz')
上面的方法很简单,但是如果您有类似['AB','C','xyz']之类的列表,则无法使用,在这种情况下,您可以简单地对某个字符串进行联接,并将该字符串包括在内:
abc_string = '!!!'.join(abc_list)
print abc_string.count('ABC!!!xyz')
counter = 0
for index, item in enumerate(abc_list):
if index < len(abc_list) and item == 'ABC' and abc_list[index+1] == 'xyz':
counter += 1
这样的事情会起作用:
counter = 0
for i in range(len(input_list) - 1):
if input_list[i] == "ABC" and input_list[i + 1] == "xyz":
counter += 1
或者,您可以使用内置的Counter
:
from collections import Counter
a = ['ABC', 'ABC', 'ABC', 'xyz', 'xyz', 'xyz', 'ABC', 'ABC', 'xyz', 'ABC']
print {(k1, k2): val for (k1, k2), val in Counter([(a[i], a[i+1]) for i in range(len(a)-1)]).iteritems() if k1 != k2}
>>> {('ABC', 'xyz'): 2, ('xyz', 'ABC'): 2}
difflib的SequenceMatcher似乎是一个很好的工具。
from difflib import SequenceMatcher
haystack = 'ABC ABC ABC xyz xyz xyz ABC ABC xyz ABC xyz ABC DCE ABC xyz'.split()
haystack_sz = len(haystack)
needle = ['ABC', 'xyz']
needle_sz = len(needle)
s = SequenceMatcher(None, needle, haystack)
m = s.find_longest_match(0, needle_sz, 0, haystack_sz)
print m # just for debug
count = 0
while m.size == needle_sz:
count += 1
m = s.find_longest_match(0, needle_sz, m.b + m.size, haystack_sz)
print m # just for debug
print count
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.