a = [6, 7, 8]
b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(set(a).issubset(set(b)))
print(set(a).issuperset(set(b)))
我希望的結果是:當a值連續存在于b之中,就回傳True;
issubset:
我嘗試用issubset之后,初次的確能回傳我要的結果,但是我試著修改a = [6, 7, 3],按我的邏輯應該是回傳False,因為這個資料在b之中沒有發現100%的連續性,結果issubset回傳一個True,由此可見,issubset不考慮元素是否存在連續性,只要個體全部存在就回傳True,反之False,這不是我想要的;
issuperset:
這個基本費,一開始就是False
最后,這里資料量很少,可以用for進行逐一對比判斷,但我這邊真實場景資料量很大,原屬少則幾萬,多的幾十萬,用FOR效率非常低,求各位大神出手相救。
uj5u.com熱心網友回復:
不用for , 試試 while這個不用檢查完,只要匹配,就停止并回傳。參考
a = [6, 7, 8]
b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
i = 0
match = False
lena = len(a)
bound = len(b) - lena + 1
while(not match and i < bound):
match = a == b[i:i+lena]
i += 1
print(match)
uj5u.com熱心網友回復:
import more_itertools as mi
a = [6, 7, 8]
b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ]
print(tuple(a) in mi.windowed(b, len(a)))
uj5u.com熱心網友回復:
issubset和issuperset,都是在判斷集合是否是子集,但是它們不相同,而且是完全相反。即集合A,B
A.issubset(B)等價于B.issuperset(A)
然后你提問中有個詞“連續值”,一旦你引入了set集合的概念,就應該知道集合它是無序的,應該沒辦法滿足你連續的要求吧。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/149807.html
