![](/img/trans.png)
[英]How do I make a list of sets of n+1 elements out of a list of sets of n elements efficiently in 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.