Я не знаю, что не так с моим кодом. Я получаю эту ошибку, но мой код выглядит правильно для меня. len(song_json['Lyrics']) имеет длину 44.

captions = ['[Intro]', '[Verse]', '[Chorus]']
for word in captions:
    for i in range(len(song_json['Lyrics'])):
        if word == song_json['Lyrics'][i]:
            song_json['Lyrics'].remove(word)
        else:
            pass

IndexError: список индексов выходит за пределы диапазона

-1
lydol 21 Дек 2019 в 02:24

3 ответа

Похоже, вы хотите удалить что-нибудь из song_json['Lyrics'], который находится в captions. Вы могли бы сделать это вместо этого:

song_json['Lyrics'] = [lyric for lyric in song_json['Lyrics'] if lyric not in captions]

Или используя фильтр:

song_json['Lyrics'] = list(filter(lambda l: l not in captions, song_json['Lyrics']))
1
blueteeth 21 Дек 2019 в 01:23

Благодарность за вклад каждого! Это то, что я изменил свой код

captions = ['[Intro]', '[Verse]', '[Chorus]']
for word in captions:
    for i in song_json['Lyrics']:
        if word == i:
            song_json['Lyrics'].remove(word)
        else:
            pass
0
lydol 23 Дек 2019 в 00:01

Каждый раз, когда вы звоните это.

song_json['Lyrics'].remove(word)

Вы уменьшаете длину на 1 из song_json, которая при выполнении следующего цикла for:

for i in range(len(song_json['Lyrics'])):

а затем удалив часть song_json, чтобы в итоге индекс вашего списка оказался вне диапазона.

0
RHP 20 Дек 2019 в 23:32