Digamos que tenemos una lista list_a = [a, b, C,., /,!, D, E, f,]

Quiero agregar a una nueva lista solo las letras del alfabeto.

Entonces la nueva lista será list_b = [a, b, C, d, E, f]. Hasta ahora he intentado hacerlo así:

list_b = []
for elements in list_a:
    try:
        if elements == str(elements):
            list_b.append(elements)
    except ValueError: #Catches the Error when the element is not a letter
        continue

Sin embargo, cuando imprimo list_b tiene todos los elementos de list_a, no hace el trabajo que esperaba. Algunas ideas ?

PD: la coma en el ejemplo específico también trae Error.

0
Vaggelis Manousakis 28 feb. 2018 a las 22:05

6 respuestas

La mejor respuesta

Puedes probar esto:

import string
for item in list_a:
    if item in string.ascii_letters:
        list_b.append(item)

Además, consulte el string. Tiene muchos métodos adicionales que pueden ayudarte, si deseas trabajar con cadenas. Tenga en cuenta que esto solo funciona con caracteres ascii. Si desea verificar cada carácter en un alfabeto, puede hacerlo a través del método isalpha(), como los otros han señalado anteriormente.

0
kerk12 28 feb. 2018 a las 19:24

Te estás perdiendo el hecho de que la función str () no devuelve los elementos "str" que crees que lo hace, solo una representación str de ellos. Intenta crear una lista con tu diccionario [a-zA-Z] (no muy pitónico pero fácil de entender) y comprueba si tu personaje existe en él. Sugiero escribir su propio código desde cero en lugar de copiar / pegar, esa es la única forma de entender realmente el problema ...

2
Theo 28 feb. 2018 a las 19:14

Puede usar el paquete string o re para hacer esto

import re
new_list = [c for c in old_list if re.match(r'[a-zA-Z]', c)]

O con string

import string
new_list = [c for c in old_list if c in string.ascii_letters]
-2
Brendan Abel 28 feb. 2018 a las 19:09

Bueno, es básicamente la misma lógica de usar el método isalpha(), pero puedes hacerlo usando filter:

list_a = ['a','b','C','.','/','!','d','E','f']

list_b = list(filter(lambda i: i.isalpha(), list_a))

print(list_b)

Salida:

['a', 'b', 'C', 'd', 'E', 'f']
0
Vasilis G. 28 feb. 2018 a las 19:33

Intente verificar si el carácter es un alfabeto utilizando la función .isalpha ().

list_b = []
for elements in list_a:
   if elements.isalpha():
        list_b.append(elements)
2
wpercy 28 feb. 2018 a las 19:12

Puede usar el .isalpha() del método tipo de cadena

In [1]: list_a = ['a','b','C','.','/','!','d','E','f']

In [2]: list_b = [i for i in list_a if i.isalpha()]

In [3]: list_b
Out[3]: ['a', 'b', 'C', 'd', 'E', 'f']
3
wpercy 28 feb. 2018 a las 19:14