[問題] 多個list項目取交集

看板Python作者 (Fantasy_Chopin)時間1年前 (2022/11/08 23:49), 1年前編輯推噓7(7036)
留言43則, 6人參與, 1年前最新討論串1/1
譬如有個list的資料是: list=[[a,b,c,d],[b,c],[a,c,e],[b,c,f]] 則各項目的交集有 [c](*4) [b](*3) [b,c](*3) [a,c](*2) 想請教板上的大大 若是想用python找出上面的資訊 要如何操作呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.133.22 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1667922597.A.BCA.html

11/09 00:49, 1年前 , 1F
用set()吧
11/09 00:49, 1F

11/09 09:21, 1年前 , 2F
如果list下面的每個sub list內的元素都是不重複的話,
11/09 09:21, 2F

11/09 09:21, 1年前 , 3F
遍歷每個sub list然後把每個元素當作key放進另一個dic
11/09 09:21, 3F

11/09 09:21, 1年前 , 4F
tionary,value就從1開始count,每次遇到就讓他+1,如
11/09 09:21, 4F

11/09 09:21, 1年前 , 5F
果每個sub list的element會重複出現就先取set,以上最
11/09 09:21, 5F

11/09 09:21, 1年前 , 6F
基本辦法
11/09 09:21, 6F
不好意思 我有點看不太懂 可以請問詳細的程式碼要怎麼打嗎

11/09 09:52, 1年前 , 7F
先把list of list轉list of set後就用set取交集
11/09 09:52, 7F

11/09 10:57, 1年前 , 8F
直覺是用Apriori 但不知道是否會殺雞焉用牛刀~
11/09 10:57, 8F

11/09 10:58, 1年前 , 9F

11/09 10:58, 1年前 , 10F
取length就可以達到你要的結果
11/09 10:58, 10F
請問他裡面的antecedent跟consequents是在同一筆交易裡的先後順序嗎 還是5筆消費資 料的先後順序呢 若想要知道不同筆資料是否存在次序關係也是用Aprior嗎

11/09 12:38, 1年前 , 11F
喔我看懂你的題目了,我那個方法應該不是你要的解,我
11/09 12:38, 11F

11/09 12:38, 1年前 , 12F
想想看…
11/09 12:38, 12F
※ 編輯: FantasyChopi (120.126.194.246 臺灣), 11/09/2022 13:55:34

11/09 14:25, 1年前 , 13F
我是看不出來要取交集,還是要找元素在集合中出現的次數啦
11/09 14:25, 13F

11/09 14:25, 1年前 , 14F
11/09 14:25, 14F

11/09 14:26, 1年前 , 15F
你這樣的話還有 [a]*2 啊
11/09 14:26, 15F

11/09 14:33, 1年前 , 16F
然後會不會有 [a, a, b] 這種? 如果還有 [a, a, c] 的話
11/09 14:33, 16F

11/09 14:33, 1年前 , 17F
要算次數的話 [a] 要算幾次? [a, a] 要不要算是一種?
11/09 14:33, 17F

11/09 14:36, 1年前 , 18F
我只想到暴力解,會用到itertools.combinations
11/09 14:36, 18F

11/09 14:37, 1年前 , 19F
首先,把原始list裡面所有的element都單獨取出,建立
11/09 14:37, 19F

11/09 14:37, 1年前 , 20F
arr = [a, b, c, d, e, f]
11/09 14:37, 20F

11/09 14:39, 1年前 , 21F
然後,用combinations跑出從1個元素到len(arr)個元素
11/09 14:39, 21F

11/09 14:39, 1年前 , 22F
的組合,假設放在arr1
11/09 14:39, 22F

11/09 14:41, 1年前 , 23F
然後,創立一個函數,比對a, b兩個iterable物件中,a
11/09 14:41, 23F

11/09 14:41, 1年前 , 24F
的元素是否都在中,如果都有就回傳True
11/09 14:41, 24F

11/09 14:41, 1年前 , 25F
a的元素是否都在b中*
11/09 14:41, 25F

11/09 14:44, 1年前 , 26F
然後,把arr1中的每個組合跟原始list中的每個sub list
11/09 14:44, 26F

11/09 14:44, 1年前 , 27F
跑a, b的比對函數,如果為True,檢查字典d是否有這個t
11/09 14:44, 27F

11/09 14:44, 1年前 , 28F
uple做為key的紀錄,沒有的話就加入字典,value給1
11/09 14:44, 28F

11/09 14:45, 1年前 , 29F
有的話,value就+1,這樣最後字典裡面就是每種combina
11/09 14:45, 29F

11/09 14:45, 1年前 , 30F
tion在所有list的sub list中出現的次數,然後從字典中
11/09 14:45, 30F

11/09 14:45, 1年前 , 31F
取出只有value > 1的key,同時跟他的value掛在一起輸
11/09 14:45, 31F

11/09 14:45, 1年前 , 32F
出就可以了
11/09 14:45, 32F

11/09 14:46, 1年前 , 33F
我只想到暴力解就是了Orz
11/09 14:46, 33F

11/09 14:51, 1年前 , 34F
喔對,這是預設在每個原始list中的sub list下面的元素
11/09 14:51, 34F

11/09 14:51, 1年前 , 35F
都不重複出現的方法
11/09 14:51, 35F

11/09 14:53, 1年前 , 36F
然後上面Hsins大提到應該還會有[a]*2才對才符合我想的
11/09 14:53, 36F

11/09 14:53, 1年前 , 37F
題目
11/09 14:53, 37F

11/09 14:55, 1年前 , 38F
如果是一個sub list中會出現兩次以上的相同元素而且要
11/09 14:55, 38F

11/09 14:55, 1年前 , 39F
視為獨立的兩個元素的話,一開始extract元素的時候就
11/09 14:55, 39F

11/09 14:55, 1年前 , 40F
要刻意多加入一個該元素去跑combinations
11/09 14:55, 40F

11/09 15:02, 1年前 , 41F
set可以處理交集的問題
11/09 15:02, 41F

11/09 15:12, 1年前 , 42F
喔…小地方,跑combinations的時候不用跑到len(arr),
11/09 15:12, 42F

11/09 15:12, 1年前 , 43F
跑到sub list最長那個長度就好
11/09 15:12, 43F
我目前已經成功用aprior做出來了 感謝各位 ※ 編輯: FantasyChopi (111.240.129.139 臺灣), 11/09/2022 19:28:43
文章代碼(AID): #1ZQdgblA (Python)
文章代碼(AID): #1ZQdgblA (Python)