Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
listA的string元素是listB的子字符串。如何在包含python中的这些子字符串的listB中检索和存储每个字符串?_Python_List - Fatal编程技术网

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

listA的string元素是listB的子字符串。如何在包含python中的这些子字符串的listB中检索和存储每个字符串?,python,list,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']

我有下列清单

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'] 
i、 e一个名为alpha的列表,类似于beta和gamma

我必须得到这个只有开始字符串,而不是任何其他匹配字符串!例:在阿尔法-贝塔和阿尔法$v4的情况下,贝塔属于阿尔法,而贝塔-阿尔法属于贝塔

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

轻松解决:


你可以这样做:

{i:[j代表列表B中的j,如果j.startswith(i)]代表列表A中的i}

返回:

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

此代码将为列表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']

如果我有列表A和10k+的1000个元素的列表呢。。在listB?Id中,您想使两个列表中的元素都成为列表,只需将“在listB中”更改为“在listA+listB中”。
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']