What is the most Pythonic way? Well... that depends on what you are trying to accomplish and what you want to optimize for...
If your use case only needs to check for the existence-of and locations for a single subset in a single run of your code... The code you have could suffice. Depending on the data source for your "large list," generators could help you with memory efficiency, but I don't think that is what you are after.
As you have working code for your particular challenge, I am guessing that you are wanting to optimize the performance for these "subset lookups" - meaning you need to check the list for the presence-of and locations for multiple subset (pairs?). If so, to optimize for lookup-speed (at the expense of memory), you could iterate through the long list once and build an index of all subsets and their locations in a Python dictionary, like so:
from collections import defaultdict
large_list = ['7', '10', '8', '8', '6', '13', '7', '10', '10', '13', '7', '11',
'9', '7', '15', '9', '10', '10', '6', '16']
indexed_subsets = defaultdict(list)
for i in range(len(large_list)-1):
subset = (large_list[i], large_list[i+1])
indexed_subsets[subset].append(i)
# Test if subset exists
print(('10', '10') in indexed_subsets)
# Print locations where the subset exists
print(indexed_subsets.get(('10', '10')))
# Output:
# True
# [7, 16]
This method has the benefit that both checking for the existence of a subset and getting the locations for the subsets are always fast (O(1)
vs. O(n)
); though the dictionary will be much bigger than the already "large list" that you want to process.
...it is all about what you are wanting to optimize for.