Python 似乎无法从列表中删除所有空字符串和空字符串?

Python 似乎无法从列表中删除所有空字符串和空字符串?,python,Python,我有一长串的信息是从公告牌的热门100页上刮下来的,我正试图将这些信息提炼成歌曲和艺术家。然而,我似乎无法删除列表中的所有空白部分以及仅为空白的点。和“ 我已经尝试了所有我能在这里找到的关于过滤器功能以及人们建议的其他选项。我最初的尝试是使用包含的代码,它对列表的第一部分起作用,但由于某些原因,它永远不会结束,并且总是中途停止 for y in parse: if y == "": parse.remove("") elif y == " ": p

我有一长串的信息是从公告牌的热门100页上刮下来的,我正试图将这些信息提炼成歌曲和艺术家。然而,我似乎无法删除列表中的所有空白部分以及仅为空白的点。和“

我已经尝试了所有我能在这里找到的关于过滤器功能以及人们建议的其他选项。我最初的尝试是使用包含的代码,它对列表的第一部分起作用,但由于某些原因,它永远不会结束,并且总是中途停止

for y in parse:
    if y == "":
        parse.remove("")
    elif y == " ":
        parse.remove(" ")

我希望自己收到一个没有或“”的列表,但只有列表的第一部分受到影响。

不要修改正在迭代的列表

假设parse是

parse=[1,' ', '', 2,3,4]
你可以这样做

parse_fix=[]
for y in parse:
    if y!='' and y!=' ': parse_fix.append(y)
然后parse_fix将是您想要的列表

简短的版本可能是这样的

parse=[y for y in parse if y!='' and y!=' ']
这将完成以下工作:

>>> dirty =['1',' ', '', '2','3','4']
>>> clean = [row for row in dirty if row.strip()]
>>> clean
['1', '2', '3', '4']
>>> 
您可以使用:

list1 = ["1 ", "", " ", "3", "  4", "       ",""]
list2 = [x for x in list1 if x.strip() ]
输出列表2:

['1 ', '3', '  4']
用于:

Python2.x:

Python3.x:

输出:

编辑:

要删除元素中的空白,假设:

parse = ['a ', ' ', ' b', 'c', '', 'd ']
与和一起使用:

Python2.x:

Python3.x:

输出:


发布一个解析示例。您在对列表进行迭代时正在修改列表,这将导致跳过项。为此,您应该使用类似列表理解或过滤器的内容。例如:parse=[p For p in parse if p not in[,'']]我想这可以完成工作:clean_list=[parse if row.strip中的行对行]的可能重复不能说,因为我们不确定OP的情况下解析列表的准确程度。@DirtyBit好吧,这就是假设位的工作原理!需要注意的是,它需要使用“and”而不是“or”。我还是不明白为什么仅仅修改列表不起作用,但现在我知道了。我明白你在那里做了什么。dirtyif row.strip bit很聪明这正是我给出的答案,@Frenchy.yes,只是一个bandwith的问题,所以我让你做父亲!!我向你投赞成票:-P谢谢,@Frenchy
print(filter(str.strip, parse))
print(list(filter(str.strip, parse)))
['a', 'b', 'c', 'd']
parse = ['a ', ' ', ' b', 'c', '', 'd ']
print(map(str.strip, filter(str.strip, parse)))
print(list(map(str.strip, filter(str.strip, parse))))
['a', 'b', 'c', 'd']