在python中搜索字符串匹配后,如何从列表中获取下一个元素

在python中搜索字符串匹配后,如何从列表中获取下一个元素,python,Python,嗨,朋友们,我有一个我正在搜索字符串的列表,我想和搜索的字符串一起获得列表项的下一个元素。下面是示例代码 >>> contents = ['apple','fruit','vegi','leafy'] >>> info = [data for data in contents if 'fruit' in data] >>> print(info) ['fruit'] 我想把输出作为 水果 vegi实现这一点的一种方法是迭代压缩的列表 调用z

嗨,朋友们,我有一个我正在搜索字符串的列表,我想和搜索的字符串一起获得列表项的下一个元素。下面是示例代码

>>> contents = ['apple','fruit','vegi','leafy']
>>> info = [data for data in contents if 'fruit' in data]
>>> print(info)
['fruit']
我想把输出作为 水果
vegi

实现这一点的一种方法是迭代压缩的列表

调用
zip(contents,contents[1:])
,允许
data
变量在循环期间采用以下值:

('apple', 'fruit')
('fruit', 'vegi')
('vegi', 'leafy')
按这个顺序。因此,当匹配“水果”时,
数据
具有值
('fruit','vegi')

考虑一下这个计划:

contents = ['apple','fruit','vegi','leafy']
info = [data for data in zip(contents,contents[1:]) if 'fruit' == data[0]]
print(info)

我们将“水果”与
数据[0]
进行比较,当
数据
('fruit','vegi')
,时,两者将匹配。我可能会想到itertools

>>> import itertools
>>> contents = ['apple','fruit','vegi','leafy']
>>> icontents = iter(contents)
>>> iterable = itertools.dropwhile(lambda x: 'fruit' not in x, icontents)
>>> next(iterable)
'fruit'
>>> next(iterable)
'vegi'
请注意,如果您确实知道您有一个精确的匹配项(例如,
'fruit'==data
,而不是数据中的
'fruit',这将变得更容易:

>>> ix = contents.index('fruit')
>>> contents[ix: ix+2]
['fruit', 'vegi']

在这两种情况下,您都需要指定如果找不到匹配的元素应该发生什么情况。

这种简单的命令式方法对我很有效:

contents = ['apple', 'fruit', 'vegi', 'leafy']
result = '<no match or no successor>'
search_term = 'fruit'
for i in range(len(contents)-1):
   if contents[i] == search_term:
       result = contents[i+1]
print result
contents=['apple'、'fruit'、'vegi'、'leafy']
结果=“”
搜索项='水果'
对于范围内的i(长度(内容)-1):
如果内容[i]==搜索项:
结果=内容[i+1]
打印结果
请注意,您没有指定1)找不到搜索词,或2)在列表末尾找到匹配项时的行为。

关于:

def find_adjacents(value, items):
    i = items.index(value)
    return items[i:i+2]

如果
不在
项中
:)

旁边:在示例中,在数据
中使用
'fruit'可以匹配其中包含单词
fruit
的任何字符串,那么您将免费获得一个
值错误
异常。所以它也可以搭配“水果”和“百香果”。还是你的意思是“水果”==数据?我正在寻找精确匹配的水果谢谢。您能告诉我为什么要保留数据[0]吗?这将存储为元组吗?