簡體   English   中英

查找列表中兩個標簽之間的元素

[英]Find elements between two tags in a list

語言:Python 3.4 操作系統:Windows 8.1

我有一些如下列表:

a = ['text1', 'text2', 'text3','text4','text5']
b = ['text1', 'text2', 'text3','text4','New_element', 'text5']

在列表中的兩個標簽之間查找元素的最簡單方法是什么?

即使列表和標簽具有可變數量的元素或可變長度,我也希望能夠獲得它。

例如:獲取 text1 和 text4 或 text1 或 text5 之間的元素,等等。或者獲取 text1 和 text5 之間長度更長的元素。

我嘗試使用正則表達式,例如:

re.findall(r'text1(.*?)text5', a)

我猜這會給我一個錯誤,因為你只能在字符串中使用它,而不能在列表中使用它。

要獲取列表中元素的位置,請使用index() 然后使用發現的索引來創建列表的一部分,例如:

代碼:

print(b[b.index('text3')+1:b.index('text5')])

結果:

['text4', 'New_element']

您可以使用list.index方法找到每個標簽的第一次出現,然后對列表進行切片以獲取索引之間的值。

def find_between_tags(lst, start_tag, end_tag):
    start_index = lst.index(start_tag)
    end_index = lst.index(end_tag, start_index)
    return lst[start_index + 1: end_index]

如果任一標記不在列表中(或者如果結束標記僅出現在開始標記之前),其中一個index調用將引發ValueError 如果你想做其他事情,你可以抑制異常,但讓調用者處理它對我來說似乎是一個合理的選擇,所以我沒有捕獲異常。

如果標簽可能多次出現在這個列表中,您可以擴展上面 function 的邏輯以找到所有標簽。 為此,您需要使用list.indexstart參數,這將告訴它不要查看前一個結束標記之前的值。

def find_all_between_tags(lst, start_tag, end_tag):
    search_from = 0
    try:
        while True:
            start_index = lst.index(start_tag, search_from)
            end_index = lst.index(end_tag, start_index + 1)
            yield lst[start_index + 1:end_index]
            search_from = end_index + 1
    except ValueError:
        pass

這個生成器確實抑制了ValueError ,因為它一直在搜索,直到找不到另一對標簽。 如果列表中的任何地方都不存在標簽,生成器將為空,但不會引發任何異常( StopIteration除外)。

您可以通過使用index function 搜索列表中兩個對象的索引來獲取值之間的項目。 請務必在第一個 object 的索引中添加一個,這樣它就不會包含在結果中。 請參閱下面的代碼:

def get_sublist_between(e1, e2, li): 
    return li[li.index(e1) + 1:li.index(e2)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM