我有一个动物清单如下
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]
您能解释为什么前一个解决方案会插入''在列表中。另外,请澄清后一种解决方案中列表理解内部的内容?什么"如果我"代表什么?
答案 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)