Удалить элемент из str - PullRequest
1 голос
/ 16 июня 2020

У меня есть список, в который я добавляю такие элементы:

listA.append('{:<30s} {:>10s}'.format(element, str(code)))

поэтому listA выглядит так:

Paris          75
Amsterdam      120
New York City  444 
L.A            845

Я хотел бы, теперь из этого спискаA, добавить элементы в список "listB" без кода. Я хотел бы сделать это:

for i in listA:
    listB.append(i - str(code))   #that's what i want to do. The code is not good

, и я хочу, чтобы listB выглядел так:

    Paris
    Amsterdam 
    New York City
    L.A

и только с использованием listA и без доступа к 'element' и 'code '

Кто-нибудь может мне помочь?

Ответы [ 6 ]

2 голосов
/ 16 июня 2020

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

import re
listB = [re.sub('\d+', '', x).strip() for x in listA]
print(listB)

Вывод:

['Paris', 'Amsterdam', 'New York City', 'L.A']
2 голосов
/ 16 июня 2020

Для этого можно использовать регулярное выражение

import re

for i in listA:
    listB.append(re.sub(r"\W+\d+", "", i))

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

0 голосов
/ 16 июня 2020

Вы можете попробовать следующее:

listB = [element.rsplit(' ', maxsplit=1)[0].rstrip() for element in listA]

rsplit(' ', maxsplit=1) означает, что вы разделите элемент listA один раз на первый пробел с правой стороны. Дополнительный rstrip() избавится от других пробелов с правой стороны.

0 голосов
/ 16 июня 2020

Самый простой способ без новых библиотек.

Вы можете создать переменную с 40 пробелами (из-за 40 пробелов в предложении формата). например: space_var = " " Затем используйте следующий код для извлечения элемента из listA:

listB=[]
for i in listA:
    listB.append(listA[0].rsplit(space_var,1)[0])
0 голосов
/ 16 июня 2020

Как насчет использования re.sub? И вместо использования for in было бы лучше использовать map функциональный стиль или [for in] понимание списка:

import re
listB = list(map(lambda x: re.sub(r"\s+\d+", "", x), listA))

или, что еще лучше,

import re
listB = [re.sub(r"\s+\d+", "", x) for x in listA]

Немного о регулярном выражении :

  • re.sub - это функция, которая ищет и удаляет все вхождения первого аргумента в второй в третьем
  • r"\s+\d+" - это «сырая» строка буквальный с регулярным выражением внутри
  • \s+ - один или несколько пробелов (\t\n\r et c)
  • \d+ - одна или несколько цифр (\d - это allias for [0-9])
  • Для получения дополнительной информации о регулярных выражениях используйте эту страницу документации
0 голосов
/ 16 июня 2020

Мне кажется, это работает

listB=[]
for i in listA:
    listB.append(listA[0][:len(element)])
print(listB)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...