2016-01-08 3 views
2

Я получил список:Невозможно удалить элемент из списка

['ammassuladu', 'papa', 'tintola (Alghero)', 'viri, bмvere', "'acha", "'arzola", "'ccetta", "'eneru", "'enucru", "'enucr u", "'erru", "'estire", "'estire", "'ichu", "'ichumurisca", "'idru", "'inu", 'cherjere', 'mariane', 'mrexаni', 'matxoni (Alghero)', 'bolta, borta', 'cociula', 'remщliu', 'molinana', 'vтrtitxe (Alghero)', 'votаi, botаre, votаre', 'trimizon e', 'vulcаnu, vurcanu', 'sboriаi, ibboidare, sbuidаi', 'txapar (Alghero), cavт (Tabarchino)', 'taffaranu, tafferanu', 'safiru', 'butirera, butirrera, bituиra', 'tzintzalu, tzintzula, tintula', 'sмnciu, sinsulu, sintzu, sintzula', 'marr a', 'marrare', 'zia', 'tia', 'tzia, cia', 'zizм', 'lamparaxu', 'orgiali, orxali, orxabi', 'zingaru, zinganu', 'ziu', 't io', 'tiu, tziu', 'tuche, tughe', 'bachiаna, baghiana, bagiana, baiana, vagghiana', 'citiri (stare zitto)', 'carabassa', 'sщcura (Alghero)', 'zucchinu', 'cruccuriga', 'mтidare, muidare, muitare'] 

Мои задачи: исключить слова в скобках и разделить элементы, которые включают в себя запятые для разделения слов.

Я нас за это простой цикл (dialettando_tokens это список):

string = " ".join(dialettando_tokens) 
dialettando = string.split() 
for word in dialettando: 
    if '(' in word or ')' in word: 
     dialettando.remove(word) 
    elif ',' in word: 
     dialettando.remove(word) 
     dialettando.append(word[:-1]) 

print(dialettando) 

Выход:

['ammassuladu', 'papa', 'tintola', 'viri,', 'bмvere', "'acha", "'arzola", "'ccetta", "'eneru", "'enucru", "'enucru", "'e rru", "'estire", "'estire", "'ichu", "'ichumurisca", "'idru", "'inu", 'cherjere', 'mariane', 'mrexаni', 'matxoni', 'bolt a,', 'borta', 'cociula', 'remщliu', 'molinana', 'vтrtitxe', 'votаi,', 'votаre', 'trimizone', 'vurcanu', 'ibboidare,', 's buidаi', 'txapar', 'cavт', 'taffaranu,', 'tafferanu', 'safiru', 'butirrera,', 'bituиra', 'tzintzula,', 'tintula', 'sinsu lu,', 'sintzula', 'marra', 'marrare', 'zia', 'tia', 'cia', 'zizм', 'lamparaxu', 'orxali,', 'orxabi', 'zinganu', 'ziu', ' tio', 'tziu', 'tughe', 'baghiana,', 'baiana,', 'vagghiana', 'citiri', **'zitto)'**, 'carabassa', 'sщcura', 'zucchinu', 'cruc curiga', 'muidare,', 'muitare', 'botаre', 'vulcаnu', 'sboriаi', 'butirera', 'tzintzalu', 'sмnciu', 'sintzu', 'tzia', 'or giali', 'zingaru', 'tiu', 'tuche', 'bachiаna', 'bagiana', 'mтidare'] 

AS вы можете видеть, что удалены все ненужные элементы, кроме 'zitto)', и я не знаю почему.

ответ

6

Список dialettando изменен, итерации по нему. Это даст вам неожиданный результат.

Вместо перебирать его копии, как это:

for word in dialettando[:]: 
+0

Yu Hao, спасибо. Оно работает. – GiveItAwayNow

1

Вы можете удалить элементы из списка во время прохода по нему. Но этот синтаксис не документирован и не гарантированно переносится. Но в целом, если вы выполняете итерирование по списку и хотите удалить текущий элемент, ваш «текущий» элемент становится элементом после того, который вы удалили. Вот что вы можете сделать, чтобы сделать его работу без копирования списка:

i = 0 
while i < len(myList): 
    if myList[i] matches some criteria for deletion: 
     myList.remove(myList[i]) 
    else: 
     i += 1 
Смежные вопросы