2015-12-16 46 views
1

從列表中刪除項目執行某些操作後,我收到了list如下:Python 2.7版:由價值

FreqItemset(items=[u'A_String_0'], freq=303) 
FreqItemset(items=[u'A_String_0', u'Another_String_1'], freq=302) 
FreqItemset(items=[u'B_String_1', u'A_String_0', u'A_OtherString_1'], freq=301) 

我想從列表中刪除所有項目從開始A_String_0,但我喜歡保持其他項目例如在

所以上述刪除行1和2(如果在A_String_0中間或項的結束存在並不重要),保持線3

我試圖

filter(lambda a: a != 'A_String_0', result) 

result.remove('A_String_0') 

這一切並不能幫助我

+0

第二種方法適用於我。 –

+0

你是什麼意思*我想從列表中刪除從A_String_0 *開始的所有項目? – mbomb007

+0

如果它是列表中的第一個元素,他希望刪除'A_String_0',否則不要單獨使用 – wpercy

回答

2

它是如此簡單:

from pyspark.mllib.fpm import FPGrowth 

sets = [ 
    FPGrowth.FreqItemset(
     items=[u'A_String_0'], freq=303), 
    FPGrowth.FreqItemset(
     items=[u'A_String_0', u'Another_String_1'], freq=302), 
    FPGrowth.FreqItemset(
     items=[u'B_String_1', u'A_String_0', u'A_OtherString_1'], freq=301) 
] 

[x for x in sets if x.items[0] != 'A_String_0'] 
## [FreqItemset(items=['B_String_1', 'A_String_0', 'A_OtherString_1'], freq=301)] 

在實踐中會更好地過濾beffore收集:

filtered_sets = (model 
    .freqItemsets() 
    .filter(lambda x: x.items[0] != 'A_String_0') 
    .collect()) 
+0

您能舉個例子嗎?如果我想搜索'A_S *'而不是'A_String_0'? – Toren

+0

'x.items [0] .startswith(「A_S」)' – zero323

2

如何result = result if result[0] != 'A_String_0' else result[1:]

2

看來你使用的是被稱爲FreqItemset名單。但是,名稱建議您應該使用集合,而不是列表

這樣,你可以有一組可搜索的字符串,頻率。例如:

>>> d = { "the": 2, "a": 3 } 
>>> d[ "the" ] 
2 
>>> d[ "the" ] = 4 
>>> d[ "a" ] 
3 
>>> del d[ "a" ] 
>>> d 
{'the': 4} 

可以很容易地訪問每個字(它是詞典的鍵),改變其值(其幽靈頻率),或將其刪除。所有操作都避免訪問列表中的所有元素,因爲它是一個字典,即它的性能很好(總比使用列表更好)。

只是我的兩分錢。

+0

非常感謝您的幫助。我會盡力 。關於Itemset的類型,當我執行「打印類型(結果)」時,我得到一個列表。 (結果=模型....) – Toren

+0

你的意思是你不能改變它? – Baltasarq

+0

據我所知它是一套列表 – Toren