IT大神們你們好
想請問若我有兩組List,想互相比較,以S1為主,利用S2所有資料對S1的每行進行分析並取出相同文字,請問要如何寫呢?
EX:
S1=['永昕', '公司', '偵測', '資通', '系統', '遭', '病毒', '攻擊', '資安', '團隊', '啟動', '防禦機制', '復原', '作業', '資安', '專業', '人員', '合作', '清除', '病毒', '受', '影響', '資通', '系統', '陸續', '回', '復', '運作', '公司', '持續', '提升', '網路', '資訊', '基礎架構', '管控', '確保', '資料'],['公司', '桃園市', '空服員', '職業工會', '勞資', '協商', '事宜', '桃園市', '空服員', '職業工會', '暫停', '實施', '至本', '公司', '桃園', '企業', '總部', '報到', '先決條件', '拒絕', '協商', '發動', '罷工', '投票', '21', '晚間', '宣布', '罷工', '權']
S2=[公司],[作業],[飛行],[桃園市],[宣布]
希望能得到
['公司', '作業'],['桃園市','宣布']
這樣的資料
嘗試寫過迴圈不過都是空值,無法得到,拜託大家幫忙,謝謝
result = []
for si in s1:
ret = []
for sj in s2:
if sj in si :
ret.append(sj)
result.append(ret)
print(result)
抱歉可以再請問一下,如果
S1=['罷工', '公司', '偵測', '罷工', '罷工'],['公司', '作業', '飛行', '飛行', '勞資', '協商', '事宜', '桃園市', '空服員', '職業工會', '暫停', '實施', '至本', '公司']
S2=[公司],[罷工],[飛行],[宣布]
可以將重複值顯示出來嗎?
像是['罷工', '公司','罷工', '罷工'],['公司','飛行', '飛行','公司']
利用lambda、map、count、sum的技巧
s1=['罷工', '公司', '偵測', '罷工', '罷工'],['公司', '作業', '飛行', '飛行', '勞資', '協商', '事宜', '桃園市', '空服員', '職業工會', '暫停', '實施', '至本', '公司']
s2=['公司','罷工','飛行','宣布']
result = []
for si in s1:
ret = []
for sj in s2:
if sj in si :
count = sum(map(lambda word:word==sj, si))
if count > 1 : #重覆出現大於1次
ret.append(sj)
result.append(ret)
print(result)
輸出結果
[['罷工'], ['公司', '飛行']]
真的太感謝了!
有一個簡單的方法,可以先把S1跟S2的list分別接起來,然後再遍歷
不過我建議可以使用Set這樣時間複雜度可以降到O(n)
採用 set 相關函數更簡單,且較有效率。
set(S1).intersection(set(S2))