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 № 1Domyś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"]