listA的字符串元素是listB的子字符串。如何在listB中检索和存储每个字符串,其中包含python中的这些子字节?

时间:2017-06-07 23:11:26

标签: python list

我有以下列表

listA = ['alpha','beta','gamma'] 
listB = ['alphav1','alphav2','alpha$v3', 'alpha$v4-beta', 
        'alpha-beta','beta$v1', 'betav2', 'beta-alpha', 'beta$v6-get', 'gamma']

我想检索并存储:

alpha = ['alphav1','alphav2','alpha$v3', 'alpha$v4-beta'] 

即一个名为alpha的列表,类似于beta和gamma

我必须只使用起始字符串,而不是任何其他匹配的字符串!例如:alpha-beta和alpha $ v4-beta属于alpha和beta-alpha属于beta。

注意:我有一个包含1k +元素的巨大listA - 寻找具有时间复杂性问题的通用答案。

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

{i: [j for j in listB if j.startswith(i)] for i in listA}

返回:

{
    'alpha': [
        'alphav1', 
        'alphav2', 
        'alpha$v3', 
        'alpha$v4-beta', 
        'alpha-beta'
    ], 
    'beta': [
        'beta$v1', 
        'betav2', 
        'beta-alpha', 
        'beta$v6-get'
    ], 
    'gamma': [
        'gamma'
    ]
}

答案 1 :(得分:1)

使用filter轻松完成工作:

alpha = filter(lambda s: s.startswith('alpha'), listB)

答案 2 :(得分:1)

此代码将为列表b中的项目创建一个新列表,并根据字符串的第一个字母将它们分开。

alpha = [x for x in listB if x.startswith('a')]
beta = [x for x in listB if x.startswith('b')]
gamma = [x for x in listB if x.startswith('g')]

print(alpha, beta, gamma, sep='\n')

>>>
['alphav1', 'alphav2', 'alpha$v3', 'alpha$v4-beta', 'alpha-beta']
['beta$v1', 'betav2', 'beta-alpha', 'beta$v6-get']
['gamma']