Python 为什么string.split(';\n';)会在输出列表中添加额外的元素?
我有一个动物列表如下Python 为什么string.split(';\n';)会在输出列表中添加额外的元素?,python,list,split,Python,List,Split,我有一个动物列表如下 animals = ['pets','dog\ncat\nchicken\ncow\n','wild','tiger\nlion\nrhino\n'] 我只想要一份宠物的单子 pets = animals[1].split('\n') 打印(宠物)输出['dog'、'cat'、'chicken'、'cow'、''] pets列表的最后一个元素,即“”是不需要的 下面的代码行从列表中删除“”元素 pets = [i for i in animals[1].split('\
animals = ['pets','dog\ncat\nchicken\ncow\n','wild','tiger\nlion\nrhino\n']
我只想要一份宠物的单子
pets = animals[1].split('\n')
打印(宠物)输出['dog'、'cat'、'chicken'、'cow'、'']
pets列表的最后一个元素,即“”是不需要的
下面的代码行从列表中删除“”元素
pets = [i for i in animals[1].split('\n') if i]
请您解释一下为什么以前的解决方案会在列表中插入“”。另外,请澄清后一种解决方案中列表理解中发生了什么?“if i”代表什么?因为在字符串的开头和结尾(以及所有字符之间)总是有一个空字符串: 在本例中,在尾随处有一个新行字符(实际上是在尾随空字符串之前),因此在拆分后,将有一个拆分的空字符串
>>> s='dog\ncat\nchicken\ncow\n'
^ #here is the empty string
>>> s.split('\n')
['dog', 'cat', 'chicken', 'cow', '']
列表理解迭代
animals[1]中的每个项目。拆分('\n')
,然后如果bool(i)==True,即如果i不为空,则将该项目添加到列表中。此列表理解等同于:
pets = []
for i in animals[1].split('\n'):
if i: # checks if i is not empty
pets.append(i)
因为最后有一个换行符。因此,拆分也会发生在最后一个新行字符上,因此会产生两部分,即cow
和空字符串。您可以使用animals[1].strip().split('\n')
或animals[1]。split()
就是这样。甚至php也能做到这一点。感谢@Alik提供的解决方案。
pets = []
for i in animals[1].split('\n'):
if i: # checks if i is not empty
pets.append(i)