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.
Почему ohm, apple не отображается на выходе из-за "ohm" in "ohm" and "apple" in "appler" == True? Примечание: b in approved_b and approved_b in b => b == approved_b - я не уверен, что вы это имели в виду.
На данный момент я думаю, что «яблоко» в «апплере» не должно возвращать истину. Таким образом, он должен возвращать истину, только если «яблоко» + что-то еще (например, «яблоко SDGSD»). Но в любом случае все в порядке.
b = альфа, одобренный_b = альфа 1 Таким образом, b в разрешенном_b вернет истину.
Но мне нужно проверить оба содержимого архива. Кроме того, мне нужно иметь возможность проверить, что authorized_b в b также возвращает true (или нет)
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 должен возвращать [истина, ложь, истина, истина или ложь]
@Achampion, вот что я имел в виду.






Мне приходится многое предполагать из вашего кода, потому что я не совсем следую вашим описаниям. Похоже, вы хотите сопоставить только целое слово в списках 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)
Надеюсь это поможет.
Похоже на то, что я ищу. Я все еще возился с данными, чтобы проверить, правильно ли они работают. ТЫ!
Вы можете предварительно разделить утвержденные списки на наборы слов, так как со списком наборов производительность будет значительно улучшена.
Не совсем понятно, о чем вы просите. Но если вы можете показать нам свой код, используя
x in y, который обрабатывает только значенияb, будет довольно легко показать вам, как изменить его для обработки значенийzip(b, s).