найти элементы для списка в строке - PullRequest
1 голос
/ 15 декабря 2011

У меня есть строка 'RTKLOANGMSTTTS' и список кортежей [(2,5), (8,9)], который возвращает строку, содержащую буквы 2-5 и 8-9 включительно, то есть 'TKLOGM. Я думал что-то вроде:

def f(string, lst):
    for element in lst:
        if element in string:
            print string

Но это ничего не возвращает?

Ответы [ 4 ]

4 голосов
/ 15 декабря 2011

Попробуйте это:

def f(source, lst):
    return "".join(source[start - 1:end] for start, end in lst)

Что это будет делать, так это перебирать lst, извлекая кортеж в start и end на каждой итерации. Затем он создаст новую строку в виде среза из строки source, от start - 1 до end (мы используем start - 1, потому что вы показали, что 1 означает первый символ, но python использует 0-indexing, поэтому мы должен вычесть один). Наконец, мы объединяем все строки, используя "".join().

Если вы используете более старую версию Python, которая не поддерживает синтаксис генератора, используйте вместо этого:

def f(source, lst):
    return "".join([source[start - 1:end] for start, end in lst])

Он работает точно так же, но вместо работы с генератором он явно создает список, к которому присоединяются.

2 голосов
/ 15 декабря 2011
>>> x = 'RTKLOANGMSTTTS'
>>> l = [(2,5),(8,9)]
>>> ''.join(x[s-1:e] for (s,e) in l)
'TKLOGM'
0 голосов
/ 15 декабря 2011
def f(string, lst):
   for start, end in lst:
       s = string[start-1:end]
       if s:
           yield s

for s in f('RTKLOANGMSTTTS', [(2,5),(8,9)]):
    print s
0 голосов
/ 15 декабря 2011

Я думаю, это то, что вы просите.Я не могу проверить прямо сейчас, но попробуйте:

def f(string, lst):
    getStr = ''
    for t in lst:
        begin, end = t
        getStr += string[begin-1:end]
    return getStr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...