Причина, по которой он работает в вашем втором примере, состоит в том, что вы вызываете readlines () только один раз.
вы можете читать файл только один раз, поэтому, прочитав все строки, итератор файла указывает на EOF и возвращает пустое список, который не выполнит вашу попытку [ii].
Чтобы прочитать файл более одного раза, вам нужно будет вызвать file.seek (0) после каждого раунда, чтобы снова переместить итератор в начало, но это будет гораздо эффективнее читать строки в переменной.
вам может быть интересно file like objects , а также может рассматривать slice вместо xrange