Python 2.7:按值从列表中删除项目
Python 2.7 : delete item from list by value
执行一些操作后,我得到一个 list
如下:
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 开始的项目,但我想保留其他项目(如果 A_String_0 存在于 item 的中间或末尾)
所以在上面的示例中删除第 1 行和第 2 行,保留第 3 行
我试过了
filter(lambda a: a != 'A_String_0', result)
和
result.remove('A_String_0')
这一切对我没有帮助
result = result if result[0] != 'A_String_0' else result[1:]
怎么样?
就这么简单:
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)]
在实践中,最好在收集之前进行过滤:
filtered_sets = (model
.freqItemsets()
.filter(lambda x: x.items[0] != 'A_String_0')
.collect())
您似乎正在使用一个名为 FreqItemset 的列表。但是,顾名思义,您应该使用 set,而不是 list。
这样,您就可以获得一组可搜索的成对字符串、频率。例如:
>>> d = { "the": 2, "a": 3 }
>>> d[ "the" ]
2
>>> d[ "the" ] = 4
>>> d[ "a" ]
3
>>> del d[ "a" ]
>>> d
{'the': 4}
您可以轻松访问每个单词(字典的关键字)、更改其值(出现频率)或将其删除。所有操作都避免访问列表的所有元素,因为它是一个字典,即它的性能很好(无论如何都比使用列表好)。
只是我的两分钱。
执行一些操作后,我得到一个 list
如下:
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 开始的项目,但我想保留其他项目(如果 A_String_0 存在于 item 的中间或末尾)
所以在上面的示例中删除第 1 行和第 2 行,保留第 3 行
我试过了
filter(lambda a: a != 'A_String_0', result)
和
result.remove('A_String_0')
这一切对我没有帮助
result = result if result[0] != 'A_String_0' else result[1:]
怎么样?
就这么简单:
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)]
在实践中,最好在收集之前进行过滤:
filtered_sets = (model
.freqItemsets()
.filter(lambda x: x.items[0] != 'A_String_0')
.collect())
您似乎正在使用一个名为 FreqItemset 的列表。但是,顾名思义,您应该使用 set,而不是 list。
这样,您就可以获得一组可搜索的成对字符串、频率。例如:
>>> d = { "the": 2, "a": 3 }
>>> d[ "the" ]
2
>>> d[ "the" ] = 4
>>> d[ "a" ]
3
>>> del d[ "a" ]
>>> d
{'the': 4}
您可以轻松访问每个单词(字典的关键字)、更改其值(出现频率)或将其删除。所有操作都避免访问列表的所有元素,因为它是一个字典,即它的性能很好(无论如何都比使用列表好)。
只是我的两分钱。