我有多個串列。
item1 = ["4bff652c-a589-4cb0-b28f-0745e199ae88-ppp.json",
"40e10f09-9d53-4891-a4d4-d2885e5492af-vvv.json",
"065aa522-a458-44d6-9894-7e928d422c35-a.json",
"5ba3fcb2-8fae-4847-a631-9d57acb6885c.json"]
item2 = ["fa28f1ba-5532-4ff8-945d-70f5b57a7733-ppp.json",
"ee65f5b5-1333-47f3-8eca-49b63fa35a62-a.json",
"9bc518d8-84b4-4032-9ed8-4bb78559a9a0.json",
"a20bc0c3-ff61-4df5-90c5-695c7614222e-b.json"]
item3 = ["6e1cb404-9494-4e2d-a4c7-16c62bf440ce-vvv.json",
"a3b3e94c-fe69-4304-8129-2137a6407479-a.json"]
我想查找以上串列中是否有以 -ppp.json 和 -vvv.json 結尾的專案。
從上面的例子來看,正確答案是 item1。
我試過
for i in item1:
if i.endswith("-ppp.json") and i.endswith("-vvv.json"):
print(i)
#do some opertion
但是上面的代碼不起作用。
提前致謝
uj5u.com熱心網友回復:
這是一個直接的解決方案。首先,您檢查是否有vvv和ppp專案。然后,如果他們是,你做你的操作
item1 = ["4bff652c-a589-4cb0-b28f-0745e199ae88-ppp.json",
"40e10f09-9d53-4891-a4d4-d2885e5492af-vvv.json",
"065aa522-a458-44d6-9894-7e928d422c35-a.json",
"5ba3fcb2-8fae-4847-a631-9d57acb6885c.json"]
item1_contains_ppp = False
item1_contains_vvv = False
for i in item1:
if i.endswith("-ppp.json"):
item1_contains_ppp = True
if i.endswith("-vvv.json"):
item1_contains_vvv = True
if item1_contains_vvv and item1_contains_ppp:
...
#do some operation
uj5u.com熱心網友回復:
對于每個串列,您可以嘗試:
ppp = 0
vvv = 0
for item in lst:
if re.search(r'-ppp\.json$', item):
ppp = 1
if re.search(r'-vvv\.json$', item):
vvv = 1
if ppp vvv == 2:
print("List matches")
else:
print("List does not match")
這種方法使用兩個單獨的變數來跟蹤是否看到串列條目以-ppp.json或結尾-vvv.json。如果兩者都看到,則該串列報告為通過,否則報告為失敗。
uj5u.com熱心網友回復:
像下面這樣的方法會起作用:
def check_endings(items):
return all(any(l) for l in zip(*[(bool(re.match(".*-ppp.json$", i)), bool(re.match(".*-vvv.json$", i))) for i in items]))
print(check_endings(item1))
print(check_endings(item2))
print(check_endings(item3))
輸出
True
False
False
在本質上:
- 你通過串列??理解來瀏覽串列的每個元素
- 創建由兩個布林值組成的元組串列。例如,對于
item1你得到
[(True, False), (False, True), (False, False), (False, False)]
鑒于第一個元素-ppp.json以-vvv.json.
- 使用
zip(*你轉置元組串列,得到
[(True, False, False, False), (False, True, False, False)]
每個向量分別告訴您是否有 for-ppp.json或-vvv.json。
- 隨著
any你檢查是否有至少一個True在每個串列; 最后,all您驗證兩個串列是否都有True值
必須注意,bool串列推導式中的強制轉換不是必需的(aMatch是一個真正的元素),但我用它來促進解釋:
def check_endings(items):
return all(any(l) for l in zip(*[(re.match(".*-ppp.json$", i), re.match(".*-vvv.json$", i)) for i in items]))
此外,必須強調的是,您可能不需要檢查所有元素來得出特定串列滿足您的條件的結論:例如,您知道item1僅在 2 個元素之后串列是好的。在這種情況下:
def check_endings(items):
res = [False, False]
for item in items:
if re.match(".*-ppp.json$", item):
res[0] = True
elif re.match(".*-vvv.json$", item):
res[1] = True
if all(res):
return True
return False
這可能會對非常大的串列產生影響 - 請注意,這if all(res)是在回圈內
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/396170.html
上一篇:遞回地將嵌套的Dictionary/json添加到Tkinter的Treeview
下一篇:減少多維陣列sumjs的錯誤
