печать символов до и после выполнения в python - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть список Python, в котором мне нужно сделать так.Я получаю вывод как

['fd', 'dfdf', 'keyword', 'ssd', 'sdsd'], но мне нужно получить ['3=', 'fd', 'dfdf', 'keyword', 'ssd', 'sdsd', ';']

 from itertools import takewhile, chain

l = [1, 2, "3=", "fd", "dfdf", "keyword", "ssd", "sdsd", ";", "dds"]

s = "keyword"

# get all elements on the right of s
right = takewhile(lambda x: ';' not in x, l[l.index(s) + 1:])

# get all elements on the left of s using a reversed sublist
left = takewhile(lambda x: '=' not in x, l[l.index(s)::-1])

# reverse the left list back and join it to the right list
subl = list(chain(list(left)[::-1], right))

print(subl)
# ['fd', 'dfdf', 'keyword', 'ssd', 'sdsd']

1 Ответ

0 голосов
/ 26 февраля 2019

проблема с takewhile состоит в том, чтобы получить элемент, который удовлетворяет условию.

Вы можете попробовать это (если я правильно понял ваш вопрос)

l = [1, 2, "3=",  "fd", "dfdf", "keyword", "ssd", "sdsd", ";", "dds"]

it = iter(l)

first_index = next(i for i, item in enumerate(it) 
                   if isinstance(item, str) and '=' in item)
last_index = next(i for i, item in enumerate(it, start=first_index+1) 
                  if isinstance(item, str) and ';' in item)

print(l[first_index:last_index + 1])

это создает итератор it (так что item s, которые были проверены в соответствии с первым условием, больше не будут проверяться).

остальное должно быть довольно простым.

этот ответ также может быть полезным.

...