Проверка, является ли пара строк подстрокой заархивированного списка - python

b_list=["some data"]
s_list=["some data"]

approved_b=[list of "b_list" elements that are approved]
approved_s=[list of "s_list" elements that are approved]

br, sr=[],[]
for b,s in zip(b_list, s_list):
    if (b,s) in zip(approved_b, approved_s):
        br.append(b)
        sr.append(s)

Проблема вот в чем:

Если у вас есть alpha, он должен распознать, что alpha эквивалентен alpha 1, alpha 100, zoom alpha и т. д. Это может сделать x in y. Однако мне нужно иметь возможность делать это одновременно (дважды за раз) для всего zip-архива.

Пример:

b_list=['alpha', 'beta time', 'gamma', 'ohm']
s_list=['gary', 'paul', 'lime', 'apple']

approved_b=['alpha 1', 'beta', 'gamma 2', 'ohm']
approved_s=['gary time', 'zoom', 'lime time', 'appler']

результаты должны быть:

br=['alpha','gamma']
sr=['gary','lime']

Таким образом, в основном, когда он проходит проверку, ему необходимо проверить, что пара (b,s) в (b_list, s_list) совпадает с (approved_b,approved_s) и что b может быть подстрокой approved_b, а approved_b может быть подстрокой bВ ТО ЖЕ ВРЕМЯ, s может быть подстрокой approved_s и approved_s может быть подстрока s.

Не совсем понятно, о чем вы просите. Но если вы можете показать нам свой код, используя x in y, который обрабатывает только значения b, будет довольно легко показать вам, как изменить его для обработки значений zip(b, s).

abarnert 31.05.2018 02:25

Почему ohm, apple не отображается на выходе из-за "ohm" in "ohm" and "apple" in "appler" == True? Примечание: b in approved_b and approved_b in b => b == approved_b - я не уверен, что вы это имели в виду.

AChampion 31.05.2018 02:27

На данный момент я думаю, что «яблоко» в «апплере» не должно возвращать истину. Таким образом, он должен возвращать истину, только если «яблоко» + что-то еще (например, «яблоко SDGSD»). Но в любом случае все в порядке.

Gary Kim 31.05.2018 02:30

b = альфа, одобренный_b = альфа 1 Таким образом, b в разрешенном_b вернет истину.

Gary Kim 31.05.2018 02:31

Но мне нужно проверить оба содержимого архива. Кроме того, мне нужно иметь возможность проверить, что authorized_b в b также возвращает true (или нет)

Gary Kim 31.05.2018 02:32

b_list = ['alpha', 'beta time', 'gamma', 'ohm'] authorized_b = ['alpha 1', 'beta', 'gamma 2', 'ohm'] s_list = ['gary', 'paul ',' lime ',' apple '] authorized_s = [' gary time ',' zoom ',' lime time ',' appler '] b_list в authorized_b должен возвращать значение true для всех элементов. s_list в разрешенных_ s должен возвращать [истина, ложь, истина, истина или ложь]

Gary Kim 31.05.2018 02:32

@Achampion, вот что я имел в виду.

Gary Kim 31.05.2018 02:36
Почему в 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
7
220
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне приходится многое предполагать из вашего кода, потому что я не совсем следую вашим описаниям. Похоже, вы хотите сопоставить только целое слово в списках approved, поэтому вы можете использовать in на split() каждой записи, например:

def match_pair(e1, e2, lst1, lst2):
    return any(e1 in l1.split() and e2 in l2.split() for l1, l2 in zip(lst1, lst2))

In []:
br, sr = zip(*[(b, s) for b, s in zip(b_list, s_list) 
               if match_pair(b, s, approved_b, approved_s)])
print(br)

Out[]:
('alpha', 'gamma')

In []:
print(sr)

Out[]:
('gary', 'lime')

В более длинной руке это будет:

br, sr = [], []
for b, s in zip(b_list, s_list):
    if match_pair(b, s, approved_b, approved_s):
        br.append(b)
        sr.append(s)

Надеюсь это поможет.

Похоже на то, что я ищу. Я все еще возился с данными, чтобы проверить, правильно ли они работают. ТЫ!

Gary Kim 31.05.2018 04:05

Вы можете предварительно разделить утвержденные списки на наборы слов, так как со списком наборов производительность будет значительно улучшена.

AChampion 31.05.2018 04:38

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