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']