Python:列表推导后仍有空元素
关键词列表 = """ 牛 狗 猫 """
keywords_list = [i.strip() for i in keywords_list.split("\n") if i]
我还是得到了一个空的元素(最后一个元素),我在想这是为什么。另外,如果能给我的代码一些改进建议,我会很感激。
提前谢谢你们!
编辑:
我自己解决了这个问题,先把字符串去掉了空格,但我还是想知道为什么列表中还有一个空字符串元素。
这是我的解决方案:
keywords_list = [i.strip() for i in keywords_list.strip().split("\n")]
3 个回答
1
我自己解决了这个问题,先把字符串去掉了空格,但我还是在想,为什么列表里还有一个空字符串的元素。
因为你最开始的字符串是"\ncow\ndog\ncat\n",所以当你用'\n'来分割的时候,得到的结果是 ['', 'cow', 'dog', 'cat', '']。这就是分割的工作方式——每当它找到分隔符时,就会把内容分成两个部分,一个是分隔符前面的部分,一个是分隔符后面的部分,即使其中一个部分是空的。
1
当你有一个字符串,比如 'abc<sep>def<sep>ghi'
,你肯定希望把它分开,得到 ['abc', 'def', 'ghi']。如果你的字符串变成了 'abc<sep>def<sep>'
,你依然有两个分隔符,这样最后的结果还是会有三个列表项,最后一个就是第二个分隔符后面的空字符串。
简单来说,你的字符串把 '\n'
当作一个 结束符,但分割函数却把它当作 分隔符 来处理。
你可以不使用 strip()
来解决这个问题。把 '\n'
看作分隔符,然后从输入字符串中去掉最后的换行符:
keywords_list = """
cow
dog
cat"""
2
你在检查 if i
,这个检查对任何非空字符串 i
都会成功,包括那些全是空格的字符串,这样在去掉空格后就会变成空字符串。要解决这个问题,可以使用
if i and not i.isspace()
作为你列表推导式的条件(这样就只会对非空且不全是空格的字符串成功)。