Python:在三个字符的子串中切割字符串

时间:2015-02-25 22:33:29

标签: python string for-loop slice

我试图根据这样的字符将字符串切成三元组:

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

此代码不起作用,因为c [:2]没有得到任何c之后的两个字符(s1 [:2]只是附加s1的前两个字符)。

如何解决此问题,将c后面的两个字符附加到c,例如c = c + d + e

3 个答案:

答案 0 :(得分:2)

你应该能够在for循环中使用切片表示法:

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

答案 1 :(得分:2)

尝试:

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)

答案 2 :(得分:1)

由于您需要获取两个不同字符串(您的string1string2)的子字符串,因此我将该切片移动到一个非常简单的函数中:

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)]