Python 2.7 在字符串列表中查找字符串
我有一组项目列表Python 2.7 在字符串列表中查找字符串,python-2.7,apache-spark,pyspark,Python 2.7,Apache Spark,Pyspark,我有一组项目列表frequeitemsets,例如: 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) ... 我试图在每个frequeitemset中找到一个从aaa 我知道如何在列表的第一个元素中找到aaa filtered_result
frequeitemsets
,例如:
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)
...
我试图在每个frequeitemset
中找到一个从aaa
我知道如何在列表的第一个元素中找到aaa
filtered_result = model.freqItemsets()\
.filter(lambda x: x.items[0].startswith('aaa_')).collect()
问题是如何在frequeitemset
的每个元素中找到aaa
在上面示例的第一行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()
这是最有效的方法吗?因为我没有数据类型
frequeitemset
我只是演示一种使用Python默认数据类型列表的通用方法:
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)
由于我使用的是Python3,而您使用的似乎是Python2,因此需要将print(something)
更改为print something
注:
您可以调整这种通用方法,以减少手动操作,例如迭代列表列表(或者在您的情况下是frequeitemset
s)。或者将结果写入包含不同频率作为键的字典。因为我没有数据类型frequeitemset
我只是演示使用Python默认数据类型列表的一般方法:
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)
由于我使用的是Python3,而您使用的似乎是Python2,因此需要将print(something)
更改为print something
注:
您可以调整这种通用方法,以减少手动操作,例如迭代列表列表(或者在您的情况下是frequeitemset
s)。或者将结果写入包含不同频率作为键的字典。如果我理解您的意思是正确的,您希望过滤仅由特定字符串组成的元素。这看起来像是一份工作:
我宁愿将其提取到一个新函数:
def is_good(itemset):
return all(i.startswith('aaa_') for i in x.items)
itemsets.filter(is_good)
如果我理解您的意思是正确的,那么您希望过滤那些仅由某些字符串组成的元素。这看起来像是一份工作:
我宁愿将其提取到一个新函数:
def is_good(itemset):
return all(i.startswith('aaa_') for i in x.items)
itemsets.filter(is_good)
那些项目
不是集合列表。这些是unicode字符串的列表。您知道如何使用“普通”列表(Python的默认数据类型list
)执行此操作吗?这将是一个结合所谓的列表理解的起点
@albert如果您知道答案,请提供项目
不是集合列表。这些是unicode字符串的列表。您知道如何使用“普通”列表(Python的默认数据类型list
)执行此操作吗?这将是与所谓的列表理解相结合的一个起点
@albert如果你知道答案,请提供它可能类似于.filter(s代表items if items.startswith('aaa_'))
?我从未使用过任何filter()
函数。很抱歉。如果items.startswith('aaa_'),它是否会像.filter(在items.startswith('aaa_'))中的s一样)
?我从未使用过任何filter()
函数。很抱歉。@berael非常感谢您的回答。不幸的是,我得到了错误:AttributeError:“list”对象没有属性“startswith”
@Toren已修复,应该是x.items
在循环中。非常感谢,很好的解决方案!спасибо ! 请修复解决方案:从all
更改为any
。那我就投票。干得好。@Toren应用多个过滤器是和
操作,因此,它是all
,而不是any
all
在我的情况下不起作用,因为它使列表中的所有元素都以aaa
开头,否则any
工作,因为列表中的任何元素都可以以aaa
开头。我已经在我的代码中验证了这一点。@berael非常感谢您的回答。不幸的是,我得到了错误:AttributeError:“list”对象没有属性“startswith”
@Toren已修复,应该是x.items
在循环中。非常感谢,很好的解决方案!спасибо ! 请修复解决方案:从all
更改为any
。那我就投票。干得好。@Toren应用多个过滤器是和
操作,因此,它是all
,而不是any
all
在我的情况下不起作用,因为它使列表中的所有元素都以aaa
开头,否则any
工作,因为列表中的任何元素都可以以aaa
开头。我已经在我的代码中验证了这一点。