Python:列表推导后仍有空元素

1 投票
3 回答
1150 浏览
提问于 2025-04-16 01:45

关键词列表 = """ 牛 狗 猫 """

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()

作为你列表推导式的条件(这样就只会对非空且不全是空格的字符串成功)。

撰写回答