You have some pretty fundamental errors in your understanding.
First, lists in python always start with an index of 0. A list of size 3 looks like this:
three = [0, 1, 2]
The indexes are the values themselves. And yes, you could ignore the first element, and create a list like so:
names = [None, 'Wayne', 'CodeMonkey', 'King Arthur']
But it has 4 elements. Everywhere in your code you're going to have to adjust this. Want to know the length? len(names) - 1. And so on and so forth. And if you're splitting your list, you're going to have to add values to those lists if you want consistent behavior:
these_names = names[:2]
those_names = [None] + names[2:]
That's pretty painful. Don't do that - just get used the the fact that the index of an element in the list means the start of the list + index elements. So the item at the start of the list is the list name, e.g. arr, plus [0] elements.
Here's your code re-written in a way that works, under the assumption that everything else is correct.
def door_traversal():
# If you really want a list with 101 elements,
# So you can access the last item with `arr[100]` rather than `arr[99]`.
# If you're using Python2, `range` is a list
# already.
arr = list(0 for _ in range(101))
# Or use a list comprehension
arr = [0 for _ in range(101)]
# There are probably better ways to do this, but it works now
# also, no need to provide the step size if it's 1
for i in range(1, 101):
for j in range(i, 101, i):
arr[j] = not arr[j]
count = 0
for i in range(1, 101, 1):
if arr[i] == 1:
count += 1
return count
print(door_traversal())
Also, I probably would rename arr to doors, or visited_doors, if that's what they represent.
i? Your list only has 100 elements and index starts at 0, not 1