Проверьте список строк в строке и верните найденное значение, если оно совпадает

у меня есть этот список

list = ['DI', 'CI', 'CS', 'TQ','CE']

и второй список, содержащий строки

list_string = ['dd4/DI/dew', '55t/ft54/CS/rgd/fge', '32g/tt/CE/45/543/g54', '454/533/633/76']

Я хотел бы вернуть список той же длины, что и list_string, с элементом в списке, если он присутствует, если не вернуть «другие», что-то вроде этого

return_list = ['DI', 'CS', 'CE', 'others']

что ты уже испробовал ?

sahasrara62 11.12.2020 17:05

Я пробую этот return_list = [next((t for t в элементе, если список в t), «другие») для элемента в list_string], но предложение «in» в for не учитывает списки

Simon Benavides 11.12.2020 17:08

@SimonBenavides, вы можете выбрать имя, отличное от «списка», что может вызвать проблемы, если ваш код нуждается, например, в приведении чего-либо к списку Python.

evenodd 11.12.2020 18:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
111
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Следующий код должен делать то, что вы хотите:

list = ['DI', 'CI', 'CS', 'TQ','CE']
list_string = ['dd4/DI/dew', '55t/ft54/CS/rgd/fge', '32g/tt/CE/45/543/g54', '454/533/633/76']

return_list = []
element_exists = False
for element in list:
    for word in list_string:
        if element in word:
            return_list.append(element)
        else:
            element_exists = False

if element_exists is False:
    return_list.append('others')
print(return_list)

Да, я думал об этом, но дело в том, что у меня есть много значений в моем списке строк, чтобы выполнять сравнение одно за другим.

Simon Benavides 11.12.2020 17:10

@SimonBenavides Я не могу придумать лучшего способа сделать это, учитывая тот факт, что вы хотите сопоставить строку из списка A с подстрокой списка B. :(

user12798919 11.12.2020 17:14

@SimonBenavides, я имею в виду, даже если вы не используете 2 цикла for, это то, что, вероятно, произойдет под капотом.

user12798919 11.12.2020 17:15

Уродливое решение с использованием Regex, используйте mylist в качестве первого списка, потому что list не должно быть именем переменной:

import re

mylist = ['DI', 'CI', 'CS', 'TQ','CE']
list_string = ['dd4/DI/dew', '55t/ft54/CS/rgd/fge', '32g/tt/CE/45/543/g54', '454/533/633/76']

pat = '|'.join(re.escape(y) for y in mylist)
return_list = [''.join(re.findall(pat,x)) if re.search(pat,x) else 'others' for x in list_string]

Используйте эту строку для сравнения. Это лучшее однострочное решение вашей проблемы. Но это не вернет других. В настоящее время я работаю над частью «других».

[j for i in list_string for j in i.split('/') if j in list]
#result
['DI', 'CS', 'CE']

Вы также можете использовать это

return [any([j in list for j in i.split('/')]) for i in list_string]

вывод для данных данных:

[True, True, True, False]
Ответ принят как подходящий

Ниже моя попытка:

list = ['DI', 'CI', 'CS', 'TQ', 'CE']

list_string = ['dd4/DI/dew',
               '55t/ft54/CS/rgd/fge',
               '32g/tt/CE/45/543/g54',
               '454/533/633/76']

return_list = [tuple(filter(lambda y: y in x, list))[0] if
    len(tuple(filter(lambda y: y in x, list))) else
    'others'
    for x in list_string]

print(return_list)

Вот результат, который совпадает с вашим ожидаемым результатом:

['DI', 'CS', 'CE', 'others']

большой! это работает идеально! большое спасибо!

Simon Benavides 14.12.2020 08:20

Другие вопросы по теме