假设我有此列表:
text = ['Malte', 'ex', 'precio', 'empcionis', 'bovum', 'septem', 'laborancium', 'et', 'unius', 'thaurj', 'et', 'unius', 'vacce', 'cum', 'vitulo', 'sequenti', 'et', 'pecudum', 'fetancium', 'sexdecim', 'et', 'duarum', 'caprarum', 'cum', 'duobus', 'et', 'cum', 'vitulo']
我想找到'cum vitulo'开头的每个索引,即13和26。
此刻,我开始以“ cum”开头,但有时紧跟着另一个单词,例如:“ duobus”
答案 0 :(得分:2)
一种方法是这样的:
text = ['Malte', 'ex', 'precio', 'empcionis', 'bovum', 'septem', 'laborancium', 'et', 'unius', 'thaurj', 'et', 'unius', 'vacce', 'cum', 'vitulo', 'sequenti', 'et', 'pecudum', 'fetancium', 'sexdecim', 'et', 'duarum', 'caprarum', 'cum', 'duobus', 'et', 'cum', 'vitulo']
target = 'cum vitulo'
target = tuple(target.split())
hits = [i for i, x in enumerate(zip(text, text[1:])) if x == target]
print(hits) # -> [13, 26]
答案 1 :(得分:0)
这是恕我直言的最简单方法(python 2.7和3):
text = ['Malte', 'ex', 'precio', 'empcionis', 'bovum', 'septem', 'laborancium', 'et', 'unius', 'thaurj', 'et', 'unius', 'vacce', 'cum', 'vitulo', 'sequenti', 'et', 'pecudum', 'fetancium', 'sexdecim', 'et', 'duarum', 'caprarum', 'cum', 'duobus', 'et', 'cum', 'vitulo'];
result = [i for i, item in enumerate(text[:-1]) if item == 'cum' and text[i+1] == 'vitulo']
print(result) # >>> [13, 26]
答案 2 :(得分:-1)
text = ['Malte', 'ex', 'precio', 'empcionis', 'bovum', 'septem', 'laborancium', 'et', 'unius', 'thaurj', 'et', 'unius', 'vacce', 'cum', 'vitulo', 'sequenti', 'et', 'pecudum', 'fetancium', 'sexdecim', 'et', 'duarum', 'caprarum', 'cum', 'duobus', 'et', 'cum', 'vitulo']
result = []
for index, value in enumerate(text):
if value == 'cum':
try:
if text[index + 1] == 'vitulo':
result.append(index)
except IndexError: # reached end
break
输出
result == [13, 26]
一种奇特的方式:
from itertools import tee
# recipe from itertools
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
[index for (index, (first, second)) in enumerate(pairwise(text)) if first == 'cum' and second == 'vitulo']