Цикл For выполняет итерацию списка без порядка в Python

#python #list #loops #for-loop

#python #Список #циклы #for-цикл

Вопрос:

Я пытаюсь выполнить итерацию строк файла. Но цикл for не сохраняет порядок. На самом деле это не случайно, каждый раз он следует тому же порядку, но не в правильном порядке. И иногда он переходит к одному и тому же индексу несколько раз. Чтобы лучше показывать, я добавил все индексы в список.

 numbers = [ ]
html_file = 'page.pwc'

with open(html_file, "r ") as f:
    html_text = f.readlines()
    for line in html_text:
        numbers.append(html_text.index(line))
        #time.sleep(1)
        
print(numbers)
  

И это результат (я добавлю изображение для показа, так как оно довольно велико для копирования-вставки здесь)

введите описание изображения здесь

В чем может быть причина этого? Я что-то простое упускаю? Может ли кто-нибудь еще попробовать тот же код и посмотреть, воспроизводим ли он? Для HTML-файла вы можете использовать HTML-код этого веб-сайта: http://example.com / . Он также дает тот же результат для меня, но с другим порядком.

Комментарии:

1. Похоже, что у вас повторяющиеся строки в HTML — первые 8 строк одинаковы, поэтому html_text.index(line) возвращает 0 для всех из них; затем 9-й и т.д. строки разные и так далее

2. Пожалуйста, прочитайте list.index документы. Он всегда возвращает индекс первого найденного элемента

3. list.index(x) вернет индекс на основе нуля в списке первого элемента, значение которого равно x. Есть необязательные start end параметры и . Какова ваша цель?

4. Также обратите внимание, что чтение html файла построчно не имеет особого смысла.

5. используйте PageElement.decompose() Page.Element.replace_with() методы или. См . crummy.com/software/BeautifulSoup/bs4/doc/#decompose и crummy.com/software/BeautifulSoup/bs4/doc/#replace-with Если вам все еще нужна помощь — начните новый вопрос

Ответ №1:

Похоже, вам нужно enumerate

Пример:

 numbers = [ ]
html_file = 'page.pwc'

with open(html_file, "r ") as f:
    html_text = f.readlines()
    for idx, line in enumerate(html_text):
        numbers.append(idx)
        
print(numbers)
  

Комментарии:

1. почему бы и нет list(range(len(html_text))) ? Я думаю, есть что-то еще, чтобы задать вопрос.