Python:在三个字符的子字符串中对字符串进行切片
Python: Slicing string in three-character substrings
我正在尝试根据这样的字符将字符串分成三元组:
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
您应该能够在 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
尝试:
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)
因为您需要获取两个不同字符串(您的 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)]
我正在尝试根据这样的字符将字符串分成三元组:
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
您应该能够在 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
尝试:
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)
因为您需要获取两个不同字符串(您的 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)]