поиск как в экселе

Главная Форумы Задать вопрос поиск как в экселе

Просмотр 15 сообщений - с 1 по 15 (из 37 всего)
  • Автор
    Сообщения
  • #6523 Score: 0
    Александр
    Участник
    3 pts

    собственно  затык в следующем: нужен нод  похожий на “string.contains”, но:

    1. Исходные есть строка и список.
    2. На выходе которого был бы лист сопоставлений первой строки  с вторым списком.

    например имеем  строку: “красны банан”, “зеленый желудь”, “зеленый апельсин” ,”123ббб”

    И имеем список.

    1 касн.

    2  желуд

    3 Зеленый апельсин.

    На выходе  нужно получить: 

    “красный банан ” 1

    “зеленый желудь” 2

    зеленый апельсин 3

    “123ббб” False

     

    Средствами нода contains реализовать не получилось.

     

     

     

     

    #6524 Score: 2
    txt
    Модератор
    86 pts

    Подскажите , а зачем вам писать 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_contain

    p.s. бывает, что нужно получить не сами элементы с вхождениями , а их индексы:
    index_contain=[IN[0].index(i) for x in IN[1] for i in IN[0] if x in i]

    #6525 Score: 0
    Александр
    Участник
    3 pts

     

    Все работает, спасибо! Но только проблема с регистром. Может есть нод по преобразованию регистра букв?

    или можно как то добавить в питон

    p.s. бывает, что нужно получить не сами элементы с вхождениями , а их индексы:

    если не затруднить можно полную версию скрипта с индексами опубликовать, я  пока в питоне слабо разбираюсь.

     

    #6526 Score: 1
    txt
    Модератор
    86 pts

    По регистру

    что конкретно требуется ? чтобы регистр букв либо игнорировался , либо нет ? или что ?

    По индексам …

    Вы задаете все что вам необходимо на выходе:

    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

    тогда на выходе получите только лист с индексами

     

     

    #6527 Score: 0
    Александр
    Участник
    3 pts

    Может я ошибаюсь, но полагаю, что в конечном счете вам нужен список, содержащий определенные текстовые вхождения ? Если это так , то , при условии уникальности двух списков, как вариант :

    В конечном счете мне нужено получить информацию  какой  номер “корня слова” (список 2) соответствует “варажению” (список 1)

    Т.е. на выходе должен быть сформирован список  “Выражений”,   к которым применим “корень”,  и по этому корню я могу получить  информацию о том какой корень соответствует какому “выражению”.

     

    #6528 Score: 0
    Александр
    Участник
    3 pts

    что конкретно требуется ? чтобы регистр букв либо игнорировался , либо нет ? или что ?

    игнорировался

    #6529 Score: 0
    Александр
    Участник
    3 pts

     

    В конечном счете мне нужено получить информацию  какой  номер “корня слова” (список 2) соответствует “варажению” (список 1)

    Т.е. на выходе должен быть сформирован лист из 3 списков

    1. содержит “выражения”  для которых имеется корень.
    2. соответствено   “корни” которые были использованы.
    3. Выражения без корней.
    4. Код  не должен быть чувствителен к регистру букв.
    #6530 Score: 1
    txt
    Модератор
    86 pts

    без учета регистра, попробуйте так

    list_contain_ignore=[i for x in IN[1] for i in IN[0] if x.upper() in i.upper()]
    OUT=list_contain_ignore

    #6531 Score: 0
    Александр
    Участник
    3 pts

    Все заработало. Огромное Вам спасибо!

    осталась одна маленькая роолема

    Как можно получить список “Корней”

    который бы соответствовал количественно  списку “Выражений”

    Выражения: красный дуб, красный вяз, связка бананов, ыыыы

    корни: красн, банан,

    На выходе:

    1. красн
    2. красн
    3. банан

     

    #6532 Score: 0
    txt
    Модератор
    86 pts

    На выходе:

    красн
    красн
    банан

    list_contain_ignore=[x for x in IN[1] for i in IN[0] if x.upper() in i.upper()]
    OUT=list_contain_ignore

    #6534 Score: 0
    Александр
    Участник
    3 pts

    txt – огромное человеческое спасибо!

    #6536 Score: 2
    Alex Babinoff
    Модератор
    13 pts

    Чисто из любви к искусству )

     

    #6538 Score: 0
    Александр
    Участник
    3 pts

    только хочу заметить что цикл используемый в ноде “контейнс” работает до первой ошибки в отличии от  цикла  “for”

    Поэтому на выходе получается не верное значение.

    В связи с чем возник вопрос как   получить на выходе из цикла с “for” –   правду/ложь.

    #6539 Score: 0
    txt
    Модератор
    86 pts

    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

    #6540 Score: 1
    Alex Babinoff
    Модератор
    13 pts

    Цикл работает не до первой ошибки, цикл работает так, как у вас заданы настройки Лейсинга: 

    Вот это полное пересечение списков, а у вас заданно кратчайшее.

Просмотр 15 сообщений - с 1 по 15 (из 37 всего)
  • Для ответа в этой теме необходимо авторизоваться.