Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么string.split(';\n';)会在输出列表中添加额外的元素?_Python_List_Split - Fatal编程技术网

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)