使用列表中的确切值搜索另一个列表。在搜索结果中附加变量

时间:2019-07-05 14:29:05

标签: python loops search

我需要创建一个具有组件ID及其描述的列表/数据框。我有一个包含组件ID的列表,另一个包含包含组件ID的描述的列表。仅应在两个列表中都具有ID的组件及其说明一起显示。

我尝试使用组件ID列表来精确搜索组件和描述列表。我无法获得所需的输出。

desclist = ['R402 MSG ='4k2 1%'','R403 MSG ='100 1%'','R404 MSG ='4k 1%'']

component = ['R402','R403','R404']

combinedlist = []

while count<(len(component) - 1):
    while True:
        for c in desclist:
            if c in component[count]:
                combinedlist.append(c)
                print(comp[count]+ ' , ' +  desclist[count])
                count = count + 1 

这不是我尝试过的代码,但是相信与我需要的代码相似,我知道直到在python中都没有循环。

我希望输出为:

R402 , MSG ='4k2 1%'

这将要求我删除描述列表中等于等号之前的所有内容。

2 个答案:

答案 0 :(得分:0)

尝试一下

>>> desclist = ['R402 MSG = "4k2 1%"','R403 MSG ="100 1%"','R404 MSG ="4k 1%"', 'R407 MSG ="4k 1%"']

# For test i have added 'R407 MSG ="4k 1%"'

>>> component = ['R402','R403','R404']

输出:

>>> from itertools import chain
>>> new_list = [[desc for desc in desclist if cid in desc] for cid in component]    
>>> list(chain(*new_list))

['R402 MSG = "4k2 1%"', 'R403 MSG ="100 1%"', 'R404 MSG ="4k 1%"']

答案 1 :(得分:0)

这是一种简单(易于理解)的方式来满足您的需求!

desclist = ['R402 MSG = Desc402','R403 MSG = Desc403',
            'R404 MSG = Desc404','R405 MSG = Desc405']
component = ['R402','R403','R404','R406']
combinedlist = []
for i in range(len(component)):
    found = False
    for j in range(len(desclist)):
        if str(component[i]) == str(desclist[j]).split(' ')[0]:
            found = True
            combinedlist.append(component[i] + ', ' + desclist[j].split(' ',1)[1])
            print(component[i], ',', desclist[j].split(' ',1)[1])
            #print('Comp : ', component[i], 'Desc : ', desclist[j].split(' ',1)[1])
            break
    if not found:
        print(component[i], ' not found in Description List')
print('Combined List : ', combinedlist)

输出:

R402 , MSG = Desc402
R403 , MSG = Desc403
R404 , MSG = Desc404
R406  not found in Description List
Combined List :  ['R402, MSG = Desc402', 'R403, MSG = Desc403', 'R404, MSG = Desc404']

我已更改了您的描述和组件列表,以涵盖您可能遇到的所有情况。另外,您的描述列表在每个元素中都有多余的引号。如果要将这些引号保留在列表中,则必须使用escape characters

在组合列表中,如果要删除等号(在描述列表中)之前的所有内容,请使用以下任一选项(取决于描述列表中的所有元素)。

desclist[j].split('=',1)[1]
desclist[j].rpartition('=')[2]