2015-02-25 3 views
1

Я пытаюсь разрезать строку на триплеты на основе символов, как это:Python: Нарезка строка в трехсимвольных подстроках

string1 = 'abcdef' 
substrings = 'abc', 'bcd', 'cde', 'def' 

я тогда хочет сравнить эти «триплеты на вторую строку и считать их появление:

string2 = 'abcijk' 
substrings of string1 in string2 = 1 ('abc'). 

Я пытаюсь сделать это с помощью функции:

def HowManyTriplets(s1, s2): 
n = 0 
    for c in s1: 
     print c + c[:2] 
    if c in s1 is c in s2: 
     n = n + 1 
return n 

Этот код D oes не работает, потому что c [: 2] не получает двух символов, следующих за c (s1 [: 2] просто добавляет первые два символа s1).

Как я могу решить эту проблему, чтобы добавить два символа, которые следуют символу с -с, например, с = с + d + е

+0

Да, они должны быть в порядке. –

ответ

1

Try:

def subs(): 
    string1 = 'abcdef' 
    string2 = 'abcijk' 
    subs = [string1[s:s+3] for s in range(len(string1)) if len(string1[s:s+3]) > 2] 
    for s in subs: 
     print s, string2.count(s) 
1

Вы должны быть в состоянии использовать только ломтик обозначение в для цикла:

for i in xrange(len(s1) - 2): 
    c = s1[i:i+3] 
    # do various operations here with c 

Альтернативно собрать их в списке понимание:

list1 = [s1[i:i+3] for i in xrange(len(s1) - 2)] 
n = 0 
for c in list1: 
    if c in s2: 
     n += 1 
print n 
0

Так ты собираешься потребность получить подстроки для двух разных строк (ваш string1 и string2), я бы двигаться, что нарезка в очень простую функцию:

def substring(string): 
    return [ string[i:i+3] for i in range(len(string)) if i + 3 <= len(string) ] 

Для сравнения и посчитайте, вы можно использовать метод list.count и объединить его с недавно созданной substring функции:

string1 = 'abcdef' 
string2 = 'abcijk' 
[ (substr, substring(string2).count(substr)) for substr in substring(string1) ] 

который выводит:

[('abc', 1), ('bcd', 0), ('cde', 0), ('def', 0)] 
Смежные вопросы