2015-12-16 48 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