从Python列表中删除一个包含'\n'的列表项。

3

我有一个列表,其中包含一个 '\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”时将其删除。

只是添加一下; 当我尝试搜索所有元素为 '\n' 的时候,我的代码又不起作用了。list1 = ['\ng,g\ng,g,g\n', '\n', '\ns\ns,s\n', '\nd,d\nd\nd,d,d,d\n\n'] print list1 for xx in list1: if xx == '\n': print xx - Rishav Sharan
5个回答

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

谢谢。我简直不敢相信我在一个微小的错误上浪费了这么多时间。 我一直认为是因为 '\n' 是一个空格符,现在正在学习正则表达式教程。-_- - Rishav Sharan

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

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

你的解决方案移除了每个 \n,但是 OP 似乎只想要移除列表元素中仅为 '\n' 的部分。 - joel goldstick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接