1
str1 = "ABCDEF"

I want to find a list of all substrings of length 3 in the above string including overlap For example:

list1 = ['ABC','BCD','CDE','DEF']

I tried the following but it misses the overlap:

n = 3
lst = [str1[i:i+n] for i in range(0, len(str1), n)]
Saad Zaheer
  • 171
  • 7

1 Answers1

3
x = "ABCDEF"

print ([x[i:i+3] for i in range(len(x)-2)])

Output:

['ABC', 'BCD', 'CDE', 'DEF']

More generally:

x = "ABCDEF"

n = 2

print ([x[i:i+n] for i in range(len(x)-n+1)])

Output:

['AB', 'BC', 'CD', 'DE', 'EF']

Even more generally:

x = "ABCDEF"

for n in range(len(x)+1):
    print ([x[i:i+n] for i in range(len(x)-n+1)])

Output:

['', '', '', '', '', '', '']
['A', 'B', 'C', 'D', 'E', 'F']
['AB', 'BC', 'CD', 'DE', 'EF']
['ABC', 'BCD', 'CDE', 'DEF']
['ABCD', 'BCDE', 'CDEF']
['ABCDE', 'BCDEF']
['ABCDEF']
Synthase
  • 5,849
  • 2
  • 12
  • 34