Не drop
. Просто возьмите строки, где EPS
конечен:
df = df[np.isfinite(df['EPS'])]
Вы можете использовать any
:
if any(x in str for x in a):
Аналогично проверке наличия всех строк из списка, используйте all
вместо any
.
jbernadas уже упомянул алгоритм Ахо-Корасика , чтобы уменьшить сложность.
Вот один из способов его использования в Python:
aho_corasick.py
from aho_corasick import aho_corasick #(string, keywords)
print(aho_corasick(string, ["keyword1", "keyword2"]))
Обратите внимание, что поиск - с учетом регистра
Я бы использовал эту функцию для скорости:
def check_string(string, substring_list):
for substring in substring_list:
if substring in string:
return True
return False
Вы должны быть осторожны, если строки в a
или str
становятся длиннее. Прямые решения принимают O (S * (A ^ 2)), где S
- длина str
, а A - сумма длин всех строк в a
. Для более быстрого решения рассмотрим алгоритм Aho-Corasick для сопоставления строк, который выполняется в линейном времени O (S + A).
Просто добавьте некоторое разнесение с помощью regex
:
import re
if any(re.findall(r'a|b|c', str, re.IGNORECASE)):
print 'possible matches thanks to regex'
else:
print 'no matches'
или если ваш список слишком длинный - any(re.findall(r'|'.join(a), str, re.IGNORECASE))
(
или *
, это не выполняется, поскольку необходимо выполнить цитирование для синтаксиса регулярного выражения.
– guettli
12 July 2016 в 10:13
'|'.join(map(re.escape, strings_to_match))
. Вероятно, вы должны re.compile('|'.join(...))
.
– Artyer
4 November 2017 в 22:50
a = ['a', 'b', 'c']
str = "a123"
a_match = [True for match in a if match in str]
if True in a_match:
print "some of the strings found in str"
else:
print "no strings found in str"
Еще одна информация о том, как получить все элементы списка, доступные в String
a = ['a', 'b', 'c']
str = "a123"
list(filter(lambda x: x in str, a))
data = "firstName and favoriteFood"
mandatory_fields = ['firstName', 'lastName', 'age']
# for each
for field in mandatory_fields:
if field not in data:
print("Error, missing req field {0}".format(field));
# still fine, multiple if statements
if ('firstName' not in data or
'lastName' not in data or
'age' not in data):
print("Error, missing a req field");
# not very readable, list comprehension
missing_fields = [x for x in mandatory_fields if x not in data]
if (len(missing_fields)>0):
print("Error, missing fields {0}".format(", ".join(missing_fields)));
flog = open('test.txt', 'r')
flogLines = flog.readlines()
strlist = ['SUCCESS', 'Done','SUCCESSFUL']
res = False
for line in flogLines:
for fstr in strlist:
if line.find(fstr) != -1:
print('found')
res = True
if res:
print('res true')
else:
print('res false')
В зависимости от контекста предположим, что если вы хотите проверить один литерал как (любое одно слово a, e, w, .. и т. д.), достаточно
original_word ="hackerearcth"
for 'h' in original_word:
print("YES")
, если вы хотите проверить любой символа из оригинала_слова: используйте
if any(your_required in yourinput for your_required in original_word ):
, если вы хотите, чтобы все входные данные, которые вы хотите в этом оригинале_слове, использовали все простые
original_word = ['h', 'a', 'c', 'k', 'e', 'r', 'e', 'a', 'r', 't', 'h']
yourinput = str(input()).lower()
if all(requested_word in yourinput for requested_word in original_word):
print("yes")
Вам нужно перебирать элементы a.
a = ['a', 'b', 'c']
str = "a123"
found_a_string = False
for item in a:
if item in str:
found_a_string = True
if found_a_string:
print "found a match"
else:
print "no match found"
for x in a
как «для каждого элемента в списке». Посколькуa
представляет собой список строк, аx
является элементом этого списка,x
является строкой (одна из «a», «b», «c» в исходном примере) – User 27 January 2014 в 22:50