2015-07-05 70 views
3

我有一個列表的動物如下爲什麼string.split(' n')在輸出列表中添加一個額外的元素?

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

我想只寵物

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

打印(寵物)輸出[ '狗', '貓', '雞','一個單獨的列表母牛」,‘’] 寵物列表即‘的最後一個元素’是不希望的

下面的代碼行中刪除‘從列表中寵物’元素

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

請你解釋一下爲什麼前面的解決方案在列表中插入'''。另外,請在後面的解決方案中澄清列表理解中發生了什麼? 「如果我」代表什麼?

+2

因爲最後有一個換行符。所以在最後一個新行字符上也會發生分裂,並因此產生兩個部分,即「牛」和空字符串。 –

+2

你可以通過使用'animals [1] .strip()。split('\ n')'或'animals [1] .split()來避免它。' – Alik

+0

這就是它應該是這樣的。即使PHP也一樣。 – Gogol

回答

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', ''] 
0

了在animals[1].split('\n')每一個項目的列表理解迭代,然後添加項目列表中如果bool(i) == True即值,如果我是不是空的。此列表理解等同於:

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