Удаление символа в списке строк

Если у меня есть список строк, например:

[("aaaa8"),("bb8"),("ccc8"),("dddddd8")...]

Что мне делать, чтобы избавиться от всех 8 в каждой строке? Я попытался использовать strip или replace в цикле for, но он не работает, как в обычной строке (это не в списке). Кто-нибудь имеет предложение?

Ответы

Ответ 1

Попробуйте следующее:

lst = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
print([s.strip('8') for s in lst]) # remove the 8 from the string borders
print([s.replace('8', '') for s in lst]) # remove all the 8s 

Ответ 2

Помимо использования цикла и для понимания, вы также можете использовать карту

lst = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
mylst = map(lambda each:each.strip("8"), lst)
print mylst

Ответ 3

mylist = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
print mylist
j=0
for i in mylist:
    mylist[j]=i.rstrip("8")
    j+=1
print mylist

Ответ 4

Более быстрый способ - присоединиться к списку, заменить 8 и разбить новую строку:

mylist = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
mylist = ' '.join(mylist).replace('8','').split()
print mylist

Ответ 5

Здесь короткий однострочный слой с использованием регулярных выражений:

print [re.compile(r"8").sub("", m) for m in mylist]

Если мы отделим операции регулярного выражения и улучшим названия:

pattern = re.compile(r"8") # Create the regular expression to match
res = [pattern.sub("", match) for match in mylist] # Remove match on each element
print res

Ответ 6

lst = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")...]

msg = filter(lambda x : x != "8", lst)

print msg

РЕДАКТИРОВАТЬ: Для любого, кто сталкивался с этим постом, просто для понимания выше удаляет любые элементы из списка, которые равны 8.

Предположим, что мы используем приведенный выше пример, первый элемент ("aaaaa8") не будет равен 8, и поэтому он будет отброшен.

Чтобы сделать это (вроде как?) С тем, как задумывался вопрос, мы могли бы выполнить нечто подобное

msg = filter(lambda x: x != "8", map(lambda y: list(y), lst))
  • Я не являюсь переводчиком в данный момент, поэтому, конечно, пробег может меняться, нам, возможно, придется индексировать, поэтому мы используем list (y [0]), который будет единственной модификацией вышеупомянутого для целей этого объяснения.

Для этого каждый элемент списка разбивается на массив символов, поэтому ("aaaa8") становится ["a", "a", "a", "a", "8"].

Это приведет к типу данных, который выглядит следующим образом

msg = [["a", "a", "a", "a"], ["b", "b"]...]

Итак, наконец, чтобы обернуть это, мы должны были бы отобразить это, чтобы привести их все обратно в один и тот же тип.

msg = list(map(lambda q: ''.join(q), filter(lambda x: x != "8", map(lambda y: list(y[0]), lst))))

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