为什么string.split(' \ n')在输出列表中添加了一个额外的元素?

时间:2015-07-05 08:02:32

标签: python list split

我有一个动物清单如下

animals = ['pets','dog\ncat\nchicken\ncow\n','wild','tiger\nlion\nrhino\n']

我只想为宠物单独列出

pets = animals[1].split('\n')

打印(宠物)输出[' dog',' cat',' chicken',' cow','& #39] 宠物清单的最后一个要素,即''是不受欢迎的

以下代码行删除了'''来自列表宠物的元素

pets = [i for i in animals[1].split('\n') if i]

您能解释为什么前一个解决方案会插入''在列表中。另外,请澄清后一种解决方案中列表理解内部的内容?什么"如果我"代表什么?

2 个答案:

答案 0 :(得分:2)

因为字符串的前导和尾部(以及所有字符之间)总是有一个空字符串:

>>> s='example'
>>> s.replace('','*')
'*e*x*a*m*p*l*e*'

在这种情况下,你在尾随处有一个新行字符(实际上在尾随空字符串之前)所以在分割后你将有一个分裂的空字符串!

>>> s='dog\ncat\nchicken\ncow\n'
                               ^ #here is the empty string 
>>> s.split('\n')
['dog', 'cat', 'chicken', 'cow', '']

答案 1 :(得分:0)

列表推导迭代animals[1].split('\n')中的每个项目,然后在bool(i) == True的值中添加项目,即如果i不为空。这个列表理解等同于:

pets = []
for i in animals[1].split('\n'):
    if i: # checks if i is not empty
        pets.append(i)