在字符串列表中查找字符串

时间:2016-02-07 10:15:39

标签: python-2.7 apache-spark pyspark

我有一组项目列表FreqItemsets,例如:

FreqItemset(items=[u'bbb_1', u'ccc_1', u'ccc_2', u'aaa_1', u'ccc_3'], freq=379)
FreqItemset(items=[u'aaa_1_1', u'ccc_1', u'ccc_2', u'ccc_3'], freq=375)
...

我尝试在每个FreqItemset找到一个项目从aaa

开始

我知道如何在列表的第一个元素中找到aaa

filtered_result = model.freqItemsets()\
 .filter(lambda x: x.items[0].startswith('aaa_')).collect()

问题是如何在aaa的每个元素中找到FreqItemset

在第一行示例中,aaa字符串位于第四位。

我想到了这样的事情:

   filtered_result = model.freqItemsets()\
     .filter(lambda x: x.items[0].startswith('aaa_'))
     .filter(lambda x: x.items[1].startswith('aaa_'))
     .filter(lambda x: x.items[2].startswith('aaa_'))
     ...
     .collect()

是最有效的方式吗?

2 个答案:

答案 0 :(得分:1)

由于我没有数据类型FreqItemset,我只是使用Python的默认数据类型list来演示一般方法:

list_1 = [u'bbb_1', u'ccc_1', u'ccc_2', u'aaa_1', u'ccc_3']
list_2 = [u'aaa_1_1', u'ccc_1', u'ccc_2', u'ccc_3']

results_1 = [s for s in list_1 if s.startswith('aaa')]
results_2 = [s for s in list_2 if s.startswith('aaa')]

print(results_1)
print(results_2)

由于我使用的是Python 3,看起来您正在使用Python 2,因此您需要将print(something)更改为print something

注意:的 您可以调整这种通用方法,以便所有那些不那么简单的东西,例如迭代列表列表(或者在您的情况下为FreqItemset)。或者将结果写入包含例如的字典中。不同的频率作为键。

答案 1 :(得分:1)

如果我理解你是正确的,你想要过滤那些仅由某些字符串组成的元素。它似乎是all()的工作:

itemsets.filter(lambda x: all(i.startswith('aaa_') for i in x.items))

我宁愿提取新功能:

def is_good(itemset):
    return all(i.startswith('aaa_') for i in x.items)

itemsets.filter(is_good)