if in statement в python reverse [duplicate]

Не drop. Просто возьмите строки, где EPS конечен:

df = df[np.isfinite(df['EPS'])]
254
задан NullUserException 2 August 2010 в 17:18
поделиться

12 ответов

Вы можете использовать any :

if any(x in str for x in a):

Аналогично проверке наличия всех строк из списка, используйте all вместо any.

469
ответ дан Mark Byers 21 August 2018 в 05:08
поделиться
  • 1
    any () принимает итерабельность. Я не уверен, какую версию Python вы используете, но в 2.6 вам нужно будет поставить [] вокруг вашего аргумента в any (). any ([x in str для x в a]), чтобы понимание возвращало итерабельность. Но, возможно, более поздние версии Python уже делают это. – emispowder 27 March 2013 в 03:06
  • 2
    @Mark Byers: Извините за поздний комментарий, но есть ли способ распечатать строку, которая была найдена? Как бы вы это сделали. Спасибо. – Shankar Kumar 1 August 2013 в 02:26
  • 3
    Не уверен, что я понимаю, если a - это список, а str - это то, что нужно сопоставить, что такое x? Python новичок ftw. :) – red 13 November 2013 в 16:01
  • 4
    @red: вы можете читать for x in a как «для каждого элемента в списке». Поскольку a представляет собой список строк, а x является элементом этого списка, x является строкой (одна из «a», «b», «c» в исходном примере) – User 27 January 2014 в 22:50
  • 5
    @emispowder Он отлично работает для меня как есть в Python 2.6.9. – MPlanchard 10 July 2015 в 18:25

jbernadas уже упомянул алгоритм Ахо-Корасика , чтобы уменьшить сложность.

Вот один из способов его использования в Python:

  1. Загрузите aho_corasick.py из здесь
  2. Поместите его в тот же каталог, что и ваш основной файл Python, и назовите его aho_corasick.py
  3. Попробуйте использовать alrorithm с следующий код:
    from aho_corasick import aho_corasick #(string, keywords)
    
    print(aho_corasick(string, ["keyword1", "keyword2"]))
    

Обратите внимание, что поиск - с учетом регистра

2
ответ дан Domi W 21 August 2018 в 05:08
поделиться
  • 1
    Интересно, но, вероятно, только быстрее для огромных строк и списков ключевых слов. – Manu CJ 28 March 2018 в 06:41

Я бы использовал эту функцию для скорости:

def check_string(string, substring_list):
    for substring in substring_list:
        if substring in string:
            return True
    return False
0
ответ дан Ivan Mikhailov 21 August 2018 в 05:08
поделиться

Вы должны быть осторожны, если строки в a или str становятся длиннее. Прямые решения принимают O (S * (A ^ 2)), где S - длина str, а A - сумма длин всех строк в a. Для более быстрого решения рассмотрим алгоритм Aho-Corasick для сопоставления строк, который выполняется в линейном времени O (S + A).

36
ответ дан jbernadas 21 August 2018 в 05:08
поделиться

Просто добавьте некоторое разнесение с помощью 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))

10
ответ дан jetpackdata.com 21 August 2018 в 05:08
поделиться
  • 1
    Это работает для данного варианта использования вопроса. Если вы выполняете поиск ( или *, это не выполняется, поскольку необходимо выполнить цитирование для синтаксиса регулярного выражения. – guettli 12 July 2016 в 10:13
  • 2
    Вы можете избежать этого при необходимости с помощью '|'.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"
3
ответ дан mluebke 21 August 2018 в 05:08
поделиться

Еще одна информация о том, как получить все элементы списка, доступные в String

a = ['a', 'b', 'c']
str = "a123" 
list(filter(lambda x:  x in str, a))
0
ответ дан Nilesh Birari 21 August 2018 в 05:08
поделиться
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)));
0
ответ дан Robert I 21 August 2018 в 05:08
поделиться
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')

0
ответ дан Stephen Rauch 21 August 2018 в 05:08
поделиться

В зависимости от контекста предположим, что если вы хотите проверить один литерал как (любое одно слово 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")
2
ответ дан TRINADH KOYA 21 August 2018 в 05:08
поделиться

Вам нужно перебирать элементы 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"
38
ответ дан zondo 21 August 2018 в 05:08
поделиться
  • 1
    Да, я знал, как это сделать, но по сравнению с ответом Маркса, это ужасный код. – jahmax 2 August 2010 в 17:24
  • 2
    Только если вы понимаете код Марка. Проблема, с которой вы столкнулись, заключается в том, что вы не изучали элементы вашего массива. Есть много тонких, питонических способов выполнить то, что вы хотите, чтобы скрыть сущность того, что было не так с вашим кодом. – Seamus Campbell 2 August 2010 в 17:38
  • 3
    Это может быть «ужасный код», но это именно то, что any () делает . Кроме того, это дает вам фактическую строку, которая соответствует, тогда как any () просто говорит вам, что существует совпадение. – alldayremix 1 April 2013 в 16:21
  • 4
    добавьте пример для последнего матча тоже – Oleg Kokorin 2 April 2018 в 21:46
  • 5
    @OlegKokorin: он создает список совпадающих строк в том же порядке, что и их, но он сохраняет только первый, если два одинаковые. – zondo 4 April 2018 в 00:35
44
ответ дан zondo 1 November 2018 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: