2011-09-08 36 views
3

我有一個列表,其中包含一個項目'\ n'。 我想將其刪除。但是,remove命令不適用於它。誰能告訴我我做錯了什麼?從python列表中刪除' n'列表項

def main(): 
    list1 = ['\ng,g\ng,g,g\n', '\n', '\ns\ns,s\n', '\nd,d\nd\nd,d,d,d\n\n'] 
    print list1 

    print list1.remove('\n') 


if __name__ == '__main__': 
    main() 

另外,如果我的列表中包含很多這樣的條目'\ n',我該如何刪除它們?我目前使用set()來獲取重複項,然後試圖讓remove命令工作。但是,set()命令似乎改變了列表的排序。我寧願遍歷列表,並在發現'\ n'後將其刪除。

+0

只是補充; 當我嘗試搜索'\ n'的所有元素時,我的代碼再次無效。 'list1 = ['\ ng,g \ ng,g,g \ n','\ n','\ ns \ ns,s \ n','\ nd,d \ nd \ nd,d,d ,d \ n \ n'] 打印列表1 對於列表1中的xx: if xx =='\ n': print xx' –

回答

6

remove方法就地修改列表並返回None。因此,當您使用print list1.remove('\n')時,列表會被修改,但打印None。請分兩步進行:

list1.remove('\n') 
print list1 

要刪除所有的事件,最自然的是構造一個新列表,同時排除換行符。例如:

list2 = [a for a in list1 if a != '\n'] 

如果一定要就地出於某種原因,然後重複使用list1.remove,直到產生一個異常:

while True: 
    try: 
     list1.remove('\n') 
    except ValueError: 
     break 
+0

謝謝。我不敢相信我在這麼小的一個錯誤上浪費了太多時間。 我在想這是因爲'\ n'是一個空格,現在正在通過正則表達式教程。 -_- –

0

它在這裏工作:

def main(): 
    list1 = ['\ng,g\ng,g,g\n', '\n', '\ns\ns,s\n', '\nd,d\nd\nd,d,d,d\n\n'] 
    print list1 
    list1.remove('\n') 
    print list1 


if __name__ == '__main__': 
    main() 

嘗試在這裏:http://codepad.org/YXHOHgwv

+0

「remove('\ n')」? – develerx

+0

我的意思是list1.remove('\ n') – arnaud576875

0
list1 = ['\ng,g\ng,g,g\n', '\n', '\ns\ns,s\n', '\nd,d\nd\nd,d,d,d\n\n'] 
list2 = [] 

list2 = [el.replace('\n', '') for el in list1] 

print list2 
    >>> 
['g,gg,g,g', '', 'ss,s', 'd,ddd,d,d,d'] 
+0

你的解決方案刪除了​​每個\ n,但OP似乎只是要求刪除只是'\ n'的列表元素。 –

5

這將刪除所有的人:

list1=filter(lambda x: x != '\n', list1) 
3

從列表中刪除的東西的一個列表解析的許多用途:

no_n = [x for x in list1 if x != '\n'] 
# to change the original list 
list1[:] = no_n