Ответ 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
Если у меня есть список строк, например:
[("aaaa8"),("bb8"),("ccc8"),("dddddd8")...]
Что мне делать, чтобы избавиться от всех 8
в каждой строке? Я попытался использовать strip
или replace
в цикле for, но он не работает, как в обычной строке (это не в списке). Кто-нибудь имеет предложение?
Попробуйте следующее:
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
Помимо использования цикла и для понимания, вы также можете использовать карту
lst = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
mylst = map(lambda each:each.strip("8"), lst)
print mylst
mylist = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
print mylist
j=0
for i in mylist:
mylist[j]=i.rstrip("8")
j+=1
print mylist
Более быстрый способ - присоединиться к списку, заменить 8 и разбить новую строку:
mylist = [("aaaa8"),("bb8"),("ccc8"),("dddddd8")]
mylist = ' '.join(mylist).replace('8','').split()
print mylist
Здесь короткий однострочный слой с использованием регулярных выражений:
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
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))
Для этого каждый элемент списка разбивается на массив символов, поэтому ("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))))
Я бы абсолютно не рекомендовал это, но если бы вы действительно хотели поиграть с картой и фильтром, я бы сказал, что вы могли бы сделать это одной строкой.