Объединить время и для цикла Python - PullRequest
0 голосов
/ 10 апреля 2019

Я ищу эффективный (возможно, нативную функцию, о которой я не знаю), способ проходить строковый символ за символом, если каждый последующий символ соответствует критерию. Как только он не совпадает, весь шебанг может быть прекращен.

Вот начало цикла:

while (char == '-' or char == '+') for char in string:

Как эффективно кодировать эту строку?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2019

Чтобы выполнить цикл последовательности и завершить цикл, если условие не выполнено, вы можете использовать break:

for char in string:
  if char not in ('-', '+'):
    break

  do_something_with(char)

Однако, если вы хотите просто собрать элементы, соответствующие условию,возможно, вы ищете itertools.takewhile:

def find_sign_prefix(s):
  sign_prefix = list(itertools.takewhile(lambda char: char in ('-', '+'), s))
  return sign_prefix

print find_sign_prefix("--+-++---3.141592+-+")
# '--+-++---'

Или специально для проверки префикса строки вы можете использовать регулярное выражение:

def find_sign_prefix(s):
  # `[+-]*` means "a '+' or '-' character, zero or more times";
  # `re.search` only matches at the beginning of a string; 
  # group 0 is the matched substring
  return re.search([+-]*, s).group(0)
0 голосов
/ 10 апреля 2019

Вы ищете проверку каждого символа на соответствие условию?

string = 'AB++-A+B-'
for char in string:
    if char == '+' or char == '-':
       # Do something
       print(char)
0 голосов
/ 10 апреля 2019

Перебирайте каждый символ, используя цикл while, и прерывайте цикл, если выполняется условие, которое вы ищете

string = '....'

for i in range(len(string)-1):

    char_i = string[i]
    char_i_1 = string[i+1]
    if not (char_i == '-' and char_i_1 == '+'):
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...