我有以下列表
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 - 寻找具有时间复杂性问题的通用答案。
答案 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']