Python, разбить входную строку на элементы другого списка и удалить из него цифры - PullRequest
0 голосов
/ 13 октября 2018

У меня были некоторые проблемы с этой проблемой, и мне нужна ваша помощь.Я должен сделать метод Python (mySplit (x)), который принимает входной список (который имеет только одну строку в качестве элемента), разбивать этот элемент на элементы другого списка и цифр.Я использую Python 3.6. Вот пример:

l=['I am learning']
l1=['____-----This4ex5ample---aint___ea5sy;782']
banned=['-', '+' , ',', '#', '.', '!', '?', ':', '_', ' ', ';']

Возвращенные списки должны выглядеть следующим образом:

mySplit(l)=['I', 'am', 'learning']
mySplit(l1)=['This', 'ex', 'ample', 'aint', 'ea', 'sy']

Я пробовал следующее, но я всегда застреваю:

def mySplit(x):

    l=['-', '+' , ',', '#', '.', '!', '?', ':', '_', ';'] #Banned chars
    l2=[i for i in x if i not in l] #Removing chars from input list
    l2=",".join(l2)
    l3=[i for i in l2 if not i.isdigit()] #Removes all the digits
    l4=[i for i in l3 if i is not ',']
    l5=[",".join(l4)]
    l6=l5[0].split(' ')
    return l6

и

mySplit(l1)
mySplit(l)

возвращает:

['T,h,i,s,e,x,a,m,p,l,e,a,i,n,t,e,a,s,y']
['I,', ',a,m,', ',l,e,a,r,n,i,n,g']

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Я бы импортировал отметки punctuation из string и использовал бы регулярные выражения следующим образом.

l=['I am learning']
l1=['____-----This4ex5ample---aint___ea5sy;782']
import re
from string import punctuation
punctuation # to see the punctuation marks.

>>> '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

' '.join([re.sub('[!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~\d]',' ', w) for w in l]).split()

Вот вывод:

>>>   ['I', 'am', 'learning']

Обратите внимание на \d прикрепленный в конце знаков препинания для удаления любых цифр.

Аналогично,

' '.join([re.sub('[!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~\d]',' ', w) for w in l1]).split() 

Выход

>>> ['This', 'ex', 'ample', 'aint', 'ea', 'sy']

Вы также можете изменить свою функцию следующим образом:

def mySplit(x):

    banned = ['-', '+' , ',', '#', '.', '!', '?', ':', '_', ';'] + list('0123456789')#Banned chars
    return ''.join([word if not word in banned else ' ' for word in list(x[0]) ]).split()
0 голосов
/ 13 октября 2018

Используйте re.split () для этой задачи:

import re
w_list = [i for i in re.split(r'[^a-zA-Z]', 
          '____-----This4ex5ample---aint___ea5sy;782') if i ]

Out[12]: ['This', 'ex', 'ample', 'aint', 'ea', 'sy']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...