Предполагая, что наибольшее число в списке может быть неизвестно, один из способов - извлечь числовую часть в каждой строке, взять set.difference
с range
до наибольшего значения и создать новый список, используя список. понимание:
import re
ints = [int(re.search(r'\d+', i).group(0)) for i in mystr]
# [0, 1, 2, 5, 8]
missing = set(range(max(ints))) - set(ints)
# {3, 4, 6, 7}
[f'State{i}' for i in missing]
# ['State3', 'State4', 'State6', 'State7']