2015-08-13 2 views
1

У меня есть список:удалить символ из всех строк в списке

mylist = ["8 - 9-", "7 - 6-", "4-"] 

Как бы удалить последний «-» от каждого элемента в MyList?

так, что выход

mylist = ["8 - 9", "7 - 6", "4"] 

редактировать: Первоначально я имел место до того, как «-», но это не должно быть там. Извиняюсь.

+0

Каков ваш ожидаемый результат, если входной сигнал «mylist = [" 8 - 9 - "," 7 - 6 "," 4 - "]'? –

+0

Возможный дубликат [Удаление символа в списке строк] (http://stackoverflow.com/questions/8282553/removing-character-in-list-of-strings) – TigerhawkT3

+0

Первый результат Google при поиске точного названия этого вопроса. – TigerhawkT3

ответ

3

rstrip и список понимание будет делать работу:

mylist = [s.rstrip('-') for s in mylist] 

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

Например:

>>> mylist = ["8 - 9-", "7 - 6-", "4-"] 
>>> mylist = [s.rstrip('-') for s in mylist] 
>>> print(mylist) 
['8 - 9', '7 - 6', '4'] 
+0

Это не удастся в случае '-4-' – vks

+0

@vks Конечно, но входной сигнал образца не имеет случая, когда за '-' следует пробел. Я предполагаю, что мой ответ - это то, что OP действительно * просил - иначе, он может использовать более сложное решение. – jme

+0

Ваш код должен работать для случая, который я добавил выше, и спасибо. Тем не менее, я прищурился, задавая свой вопрос, потому что я не должен был добавить пробел после «-». – PiccolMan

2

Использование re будет более подходящим, как он может обрабатывать случаи, когда Есть spaces после - .Это бы удалить их.

import re 
print [re.sub(r"\s*-\s*$","",i) for i in ["8 - 9 -", "7 - 6 -", "4 -"]] 

Выход: ['8 - 9', '7 - 6', '4']

+0

[Это] (http: // stackoverflow.com/questions/2556108/how-to-replace-the-last-presence-of-an-expression-in-a-string) также будет хорошо. – TigerhawkT3

+0

@ TigerhawkT3 проблема с этим будет удалять '-' из' -4', а также – vks

+0

Я думаю, что это может быть или не быть желательным, так как выборка вопроса не охватывает эти случаи. – TigerhawkT3

2

Если вы хотите строгий «удалить последнюю черту в каждой строке,» Вы можете сделать это:

>>> mylist = ["8 - 9 -", "7 - 6 -", "4 -", "4 - ", "4 - 4"] 
>>> [''.join(item.rsplit('-', maxsplit=1)) for item in mylist] 
['8 - 9 ', '7 - 6 ', '4 ', '4 ', '4 4'] 

Обратите внимание, как последняя черточка удаляется, даже если после него есть номер.

+0

OP не указал, но я думаю, что это превратит '-4' в' 4'. Все это было бы самым быстрым из всех :) – vks

+0

Извините, я не должен был добавлять пробел перед «-». Есть ли способ сделать это без пробела? – PiccolMan

+0

@PiccolMan - он работает точно так же, независимо от других символов в строке. – TigerhawkT3

Смежные вопросы