我有 2 個串列 a 和 b,它們包含具有不同長度的子串列,我想在 a 中找到一個子串列,在 b 中找到一個具有相同長度的子串列。我的方法是:
for j in range(0, len(a)-1):
for k in range(0, len(b)-1):
if len(a[j]) == len(b[k]):
問題是 a 和 b 都可以包含大約 150 個元素,并且這些回圈也在 for 回圈中,它可以運行大約 400 次這種混亂。有更有效的方法嗎?
我嘗試了我提供的代碼,但在撰寫此問題時仍未完成運行。
uj5u.com熱心網友回復:
一種方法是先找到長度。這會將嵌套串列減少為普通串列,然后更容易找到公共元素。
a2 = map(len,a)
b2 = map(len,b)
從這里開始就簡單多了,一種方法是使用集合:
set(a2).intersection(b2)
這將回傳兩個串列之間的所有交集。從這里在兩個串列中找到具有指定長度的子串列是微不足道的。
uj5u.com熱心網友回復:
如果索引大小相同,我將按每個子串列的長度對每個串列進行排序,然后從那里開始。
a.sort(key=len)
b.sort(key=len)
for item in zip(a,b):
sublist_a,sublist_b = item
if len(sublist_a) == len(sublist_b):
return sublist_a #or whatever you need
如果 和 的大小a不b相同,則仍然排序但遍歷兩者中較大的一個并跟蹤相關索引
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/534273.html
標籤:Python循环
下一篇:我想使用python回圈這種格式
