删除元素包含小写&从列表中null

时间:2018-02-27 05:24:36

标签: python list random character

我有一个包含字词,数字和字母的列表一些随机字符。我想删除除大写,标点和&之外的元素。位数。

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 -_']

2 个答案:

答案 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 -_']
>>> 

您的代码中有几个问题:

  1. 请勿使用del从列表中删除,您可以使用.remove().pop(),或只是覆盖列表。
  2. list_word未定义,也许您的意思是list_of_words
  3. 使用ord并不像使用string模块那样可读和简洁。只需import string并致电dir(string)即可查看您可以访问的各种预定义字符集。
  4. 您使用的是is错误; is比较两个对象的id个。在这种情况下,您可以省略它并使用not in