Vamos por partes:
Então ele sabe que toda vez que alguém referenciar algo nesse estilo em uma lista ele vai considerar o um elemento da lista? Eu poderia no lugar de 'fruta' colocar qualquer palavra, certo?
R: Certo, ele se referencia por qualquer coisa que possa ser mensurável por índices.
Pelo o que eu estou entendendo esse tipo de sintaxe funciona diferente pra cada do tipo primitivo, e o que ele entende como 'menor parte' desse tipo:
string - ele vai puxar cada caractere
lista - ele vai puxar cada elemento da lista
arquivo de texto - ele vai puxar cada linha do arquivo (mais pra frente aparece a mesma coisa quando estamos importando a lista de frutas de um .txt - 'for linha in frutas.txt')
R: Sim! Você entendeu certinho como funciona. Você consegue puxar uma string por letra e as listas por elemento, pois podem ser encontrados em índices! No caso do arquivo, cada linha pode ser chamado de um índice, fazendo também possível o looping.
Isso funcionaria com int ou float? Se sim, qual seria a 'menor parte' em que ele se basearia? De 1 inteiro em 1 inteiro?
R: Não é possível fazer um 'range()' com float, porém sim com inteiros, então você pode fazer o looping com inteiros de um número à outro. Ex:
for n in range(1,4):
print(n)
1
2
3
Porém com float não é possível, pois float tem um número grande de casas decimais, pode ser perigoso para o sistema fazer looping com float, além de confuso para o sistema, uma vez que ele não saberá a partir de qual casa decimal ele deve fazer o looping, podendo tornar um looping praticamente infinito. Assim sabendo, por segurança, não há looping de float, mas há a possibilidade de você tornar o resultado um float.
Ex:
for n in range(1,11):
print(float(n))
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
Enfim! Espero ter ajudado e parabéns, você entendeu bem esta lição :D