我有一个包含字词,数字和字母的列表一些随机字符。我想删除除大写,标点和&之外的元素。位数。
list_of_words = ['S I NGHVI', '', 'MGANPAT', '/', '', '', 'q', 'gq6', '14', 'A -_']
for i in list_of_words:
for j in i:
if ord(j) not in range(65,91): # for shortlisting A-Z ascii values
del list_of_words[i]
像我这样抛出错误:
TypeError: list indices must be integers or slices, not str
我想要的输出:
list_of_words = ['S I NGHVI', 'MGANPAT', '/', '14', 'A -_']
答案 0 :(得分:3)
获取“仅限大写字母和数字”:
l1
l2
Start :
a1
a2
a3
-}
l3
l4
l5
Start :
a4
a5
a6
-}
答案 1 :(得分:3)
只需执行以下操作:
from string import *
list_of_words = [word for word in list_of_words if all([letter in punctuation+ascii_uppercase+digits+' ' for letter in word]) and word]
>>> from string import *
>>> list_of_words = ['S I NGHVI', '', 'MGANPAT', '/', '', '', 'q', 'gq6', '14', 'A -_']
>>> list_of_words = [word for word in list_of_words if all([letter in punctuation+ascii_uppercase+digits+' ' for letter in word])]
>>> list_of_words
['S I NGHVI', 'MGANPAT', '/', '14', 'A -_']
>>>
您的代码中有几个问题:
del
从列表中删除,您可以使用.remove()
,.pop()
,或只是覆盖列表。list_word
未定义,也许您的意思是list_of_words
?ord
并不像使用string
模块那样可读和简洁。只需import string
并致电dir(string)
即可查看您可以访问的各种预定义字符集。is
错误; is
比较两个对象的id
个。在这种情况下,您可以省略它并使用not in
。