簡體   English   中英

Python:如何繼續有效地在列表中搜索不同的元素?

[英]Python: How do I continue searching a list for different elements efficiently?

我有許多已抓取和解析的字符串列表,我想使用正則表達式在這些列表中找到某些字符串。 我想要的每個字符串都不相同,但是它們順序出現在列表中。 即,我想要的第一個字符串將始終出現在第二個字符串之前,第二個字符串將始終出現在第三個字符串之前,依此類推。 但是,我不能只使用索引,因為列表之間的元素數量會有所不同。

防爆。 說我刮了這些字符串,並將其存儲在以下列表中:

personal_info = ["Name: John Doe", "Wife: Jane Doe", "Children: Jenny Doe", "Children: Johnny Doe", "Location: US", "Accounts: BoA", "Accounts: Chase", "House: Own", "Car: Own", "Other: None"]

personal_info2 = ["Name: James Lee", "Location: CAN", "Accounts: Citibank", "House: Rent", "Car: Own", "Other: None"]

並且我想獲取以Name,Location和House開頭的元素,它們之間可能有也可能沒有多個元素。 位置將始終在名稱之后,而房屋將始終在位置之后。

因為我將在許多列表中重復此操作, 所以我想使用第一個正則表達式進行搜索,然后繼續使用從上次中斷處開始的下一個正則表達式進行搜索,因為我知道它們會順序出現。 有沒有在Python中執行此操作的簡潔方法? 現在,我目前有一組for循環,在有匹配項時中斷,然后記錄索引以傳遞到下一個for循環。

如果必須顯示:

idx = 0 for string in string_list: idx +=1 if re.search('pattern', string) is not None: string_one = re.search('pattern', string).group(0)

可以打印您請求的字段的簡短代碼:

x=["Name", "Location", "House"]
y=iter(x)
z=y.next()
for a in personal_info:
    if a.startswith(z):
        print a
        try:
            z=y.next()
        except StopIteration:
            break

您可以用正則表達式替換“ startswith”,並用其他任何動作替換“ print”。

您可以使用索引計數器來跟蹤您應該檢查的條件:

conditions = [("Name", "John Doe"), ("Location", "US")]
condition_index = 0

for index, i in enumerate(personal_info):
    j1, j2 = conditions[condition_index]
    if j1 in i or j2 in i:
        print "List idx", index, i, "Condition", (j1, j2)
        condition_index += 1
        if condition_index == len(conditions):
            break

>>>List idx 0 Name: John Doe Condition ('Name', 'John Doe')
List idx 4 Location: US Condition ('Location', 'US')

暫無
暫無

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

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