Используйте точное значение из списка для поиска другого списка. Добавить переменную с результатами поиска - PullRequest
0 голосов
/ 05 июля 2019

Мне нужно создать список / фрейм данных с идентификаторами компонентов и их описанием. У меня есть список, содержащий идентификатор компонента и другой список, содержащий идентификатор компонента с описанием. Только компоненты с идентификатором в обоих списках должны отображаться вместе с его описанием.

Я попытался использовать список идентификаторов компонентов для точного поиска в списке компонентов и описаний. Я не смог получить желаемый результат.

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 голосов
/ 05 июля 2019

Это простой (понятный) способ выполнить то, что вам нужно!

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-символы , если вы хотите сохранить эти кавычки в своем списке.

В комбинированном списке, если вы хотите удалить все до знака равенства (в списке описания) затем используйте любой из приведенных ниже (в зависимости от всех элементов в вашем списке описания).

desclist[j].split('=',1)[1]
desclist[j].rpartition('=')[2]
0 голосов
/ 05 июля 2019

Попробуйте,

>>> 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%"']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...