You can use list comprehension and use the argument step range:
[shv[i:i+2] for i in range(0, len(shv)-1, 2)]
For arbitrary n:
def my_awesome_grouping_function(shv, n):
return [shv[i:i+n] for i in range(0, len(shv)-(n-1), n)]
Demo:
>>> shv="abcdef"
>>> [shv[i:i+2] for i in range(0, len(shv)-1, 2)]
['ab', 'cd', 'ef']
>>> [shv[i:i+3] for i in range(0, len(shv)-2, 3)]
['abc', 'def']
I trimmed the upper bound because I decided that you didn't need any incomplete pairs. You? If you just go to len(shv), I believe that you will get the remaining len(shv) % nletters in the last element.
>>> shv="abcdefgh"
>>> [shv[i:i+3] for i in range(0, len(shv), 3)]
['abc', 'def', 'gh']
>>> [shv[i:i+3] for i in range(0, len(shv)-1, 3)]
['abc', 'def', 'gh']
>>> [shv[i:i+3] for i in range(0, len(shv)-2, 3)]
['abc', 'def']
( , len(shv)-(n-1).)