我有一个包含项目'\ n'的列表。 我想删除它。但是,remove命令不起作用。谁能告诉我我做错了什么?
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 :(得分: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
答案 1 :(得分:5)
这将删除所有这些:
list1=filter(lambda x: x != '\n', list1)
答案 2 :(得分:3)
从列表中删除内容是列表推导的众多用途之一:
no_n = [x for x in list1 if x != '\n']
# to change the original list
list1[:] = no_n
答案 3 :(得分: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()
答案 4 :(得分: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']