поиск как в экселе
Главная › Форумы › Задать вопрос › поиск как в экселе
- В этой теме 36 ответов, 6 участников, последнее обновление 7 лет, 2 месяца назад сделано Oleg.
-
АвторСообщения
-
собственно затык в следующем: нужен нод похожий на “string.contains”, но:
- Исходные есть строка и список.
- На выходе которого был бы лист сопоставлений первой строки с вторым списком.
например имеем строку: “красны банан”, “зеленый желудь”, “зеленый апельсин” ,”123ббб”
И имеем список.
1 касн.
2 желуд
3 Зеленый апельсин.
На выходе нужно получить:
“красный банан ” 1
“зеленый желудь” 2
зеленый апельсин 3
“123ббб” False
Средствами нода contains реализовать не получилось.
Подскажите , а зачем вам писать False ?
Может я ошибаюсь, но полагаю, что в конечном счете вам нужен список, содержащий определенные текстовые вхождения ? Если это так , то , при условии уникальности двух списков, как вариант :
(на выходе получаем: 1 список- список содержит … 2 список- не содержит…)
Код в питоне:
list_contain=[i for x in IN[1] for i in IN[0] if x in i]
list_not_contain=set(IN[0])-set(list_contain)
OUT=list_contain, list_not_containp.s. бывает, что нужно получить не сами элементы с вхождениями , а их индексы:
index_contain=[IN[0].index(i) for x in IN[1] for i in IN[0] if x in i]
Все работает, спасибо! Но только проблема с регистром. Может есть нод по преобразованию регистра букв?
или можно как то добавить в питон
p.s. бывает, что нужно получить не сами элементы с вхождениями , а их индексы:
если не затруднить можно полную версию скрипта с индексами опубликовать, я пока в питоне слабо разбираюсь.
По регистру
что конкретно требуется ? чтобы регистр букв либо игнорировался , либо нет ? или что ?
По индексам …
Вы задаете все что вам необходимо на выходе:
list_contain=[i for x in IN[1] for i in IN[0] if x in i]
list_not_contain=set(IN[0])-set(list_contain)index_contain=[IN[0].index(i) for x in IN[1] for i in IN[0] if x in i]
а на выход OUT подаете все что вам нужно:
например если так:
OUT=list_contain, list_not_contain, index_containто будет список из 3 подсписков на выходе (далее в код блоке вы можете выбрать нужный , записав индекс этого подсписка , например a[0] – выдаст после код-блока list_contain и т.д.)
или же так:
OUT=index_contain
тогда на выходе получите только лист с индексами
Может я ошибаюсь, но полагаю, что в конечном счете вам нужен список, содержащий определенные текстовые вхождения ? Если это так , то , при условии уникальности двух списков, как вариант :
В конечном счете мне нужено получить информацию какой номер “корня слова” (список 2) соответствует “варажению” (список 1)
Т.е. на выходе должен быть сформирован список “Выражений”, к которым применим “корень”, и по этому корню я могу получить информацию о том какой корень соответствует какому “выражению”.
что конкретно требуется ? чтобы регистр букв либо игнорировался , либо нет ? или что ?
игнорировался
В конечном счете мне нужено получить информацию какой номер “корня слова” (список 2) соответствует “варажению” (список 1)
Т.е. на выходе должен быть сформирован лист из 3 списков
- содержит “выражения” для которых имеется корень.
- соответствено “корни” которые были использованы.
- Выражения без корней.
- Код не должен быть чувствителен к регистру букв.
Все заработало. Огромное Вам спасибо!
осталась одна маленькая роолема
Как можно получить список “Корней”
который бы соответствовал количественно списку “Выражений”
Выражения: красный дуб, красный вяз, связка бананов, ыыыы
корни: красн, банан,
На выходе:
- красн
- красн
- банан
На выходе:
красн
красн
бананlist_contain_ignore=[x for x in IN[1] for i in IN[0] if x.upper() in i.upper()]
OUT=list_contain_ignoretxt – огромное человеческое спасибо!
только хочу заметить что цикл используемый в ноде “контейнс” работает до первой ошибки в отличии от цикла “for”
Поэтому на выходе получается не верное значение.
В связи с чем возник вопрос как получить на выходе из цикла с “for” – правду/ложь.
list_contain_true_false=[[True if IN[1][x].upper() in i.upper() else False for i in IN[0] ] for x in range(len(IN[1]))]
OUT=list_contain_true_false -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.