/ / Znajdowanie częściowych dopasowań na liście list w Pythonie - python, list, python-2.7

Znajdowanie częściowych dopasowań na liście list w Pythonie - python, list, python-2.7

Mam listę list i muszę znaleźć i wydrukować listę zawierającą pełne i częściowe dopasowania, używając dwóch warunków ignorujących przypadek.

l = [["2014","127.0.0.1","127","DNS sever Misconfiguration"],["2014","192.168.1.25","529","Failed logon for user user1"],["2014","127.0.0.1","1","This is a test message"]]

Warunkiem 1 i 2 może być cokolwiek, tj. „192.186.1.25” lub „nieudane”

>>> for i in l:
if "condition 1" in i and "condition2" in i:
print i

daje ... nic

Mogę użyć tylko jednego warunku, który ma dokładne dopasowanie i uzyskać wynik

>>> for i in l:
if "127.0.0.1" in i:
print i


["2014", "127.0.0.1", "127", "DNS sever Misconfiguration"]
["2014", "127.0.0.1", "1", "This is a test message"]

Każda pomoc będzie doceniona

Odpowiedzi:

1 dla odpowiedzi № 1

Domyślam się, że po prostu nie pasujesz do drugiego warunku poprawnie, np. Jeśli robisz coś takiego:

"127.0.0.1" in i and "Misconfiguration" in i

ale i wygląda jak:

["2014", "127.0.0.1", "127", "DNS sever Misconfiguration"]

następnie "127.0.0.1" będzie w i, ale "Misconfiguration" wygrał - ponieważ to jest lista i in dla list jest dokładne dopasowanie, ale to, czego szukasz, jest podciągiem elementu i. Jeśli są one spójne, możesz zrobić coś takiego:

"127.0.0.1" in i and "Misconfiguration" in i[3]

lub jeśli nie są, i musisz podciągnąć wszystkie wpisy:

"127.0.0.1" in i and any("Misconfiguration" in x for x in i)

powinien to zrobić. To spowoduje, że podstrona sprawdzi każdy element w i dla wyszukiwanego hasła.


1 dla odpowiedzi nr 2
"condition 1" in i

wyszuka hasło ciąg literału "condition 1". Zamiast tego myślę, że masz zamiar szukać obiektu, do którego odwołuje się Nazwa condition1, tj .:

condition1 in l

Jeśli chcesz dopasowań „częściowych”, użyj or:

if condition1 in l or condition2 in l:

lub any():

if any(cond in l for cond in (condition1, condition2)):

0 dla odpowiedzi № 3

Oto moja próba:

l = [["2014","127.0.0.1","127","DNS sever Misconfiguration"],    ["2014","192.168.1.25","529","Failed logon for user user1"],["2014","127.0.0.1","1","This is a test message"]]

condition1 = "Failed"
condition2 = "2014"

for lst in l:
found_cond1 = False
found_cond2 = False
for string in lst:
if condition1 in string:
found_cond1 = True
if condition2 in string:
found_cond2 = True
if found_cond1 and found_cond2:
print(lst)
break

daje

["2014", "192.168.1.25", "529", "Failed logon for user user1"]