如何从列表中的元素中删除字符?
示例:
mylist = ['12:01', '12:02']
我想从文件中的时间戳中删除冒号,这样我就可以更轻松地将它们转换为24小时。现在我试图遍历列表中的元素并搜索包含冒号并进行替换的元素。
for num in mylist:
re.sub(':', '', num)
但这似乎不起作用。
帮助!
答案 0 :(得分:18)
列表理解解决方案是最恐怖的解决方案,但是,有一个重要的转折点:
mylist[:] = [s.replace(':', '') for s in mylist]
如果您分配给mylist
,就像在另一个答案中那样,而不是mylist[:]
,就像我推荐的那样,将“整个列表片段”分配给你,那么你真的在做一些事情。不同于“替换列表中的条目 ”:您正在创建一个新列表,并重新绑定您之前用于引用旧列表的裸名称。
如果多个名称(包括容器中的条目)引用旧列表,则此重新绑定不会影响其中任何一个:例如,如果您有一个以mylist
作为参数的函数, barename赋值只对函数本地有效,并且不会改变调用者看到的列表内容。
分配到整个列表切片,mylist[:] = ...
,改变列表对象而不是改变切换裸名的绑定 - 现在该列表真正被改变了,无论如何它被称为,新的价值就是所看到的。例如,如果您有一个以mylist
作为参数的函数,则整个列表切片分配会改变调用者看到的列表内容。
关键是要确切知道你所追求的效果 - 最常见的是你想改变列表对象,所以,如果必须猜测,整个列表切片分配通常是最好的猜测; - )。在性能方面,它没有任何区别(除了裸名称赋值,如果它同时保留旧的和新的列表对象,将占用更多的内存,当然两个对象仍然存在时间。)
答案 1 :(得分:17)
使用list comprehension生成新列表:
>>> mylist = ['12:01', '12:02']
>>> mylist = [s.replace(':', '') for s in mylist]
>>> print mylist
['1201', '1202']
您的解决方案不起作用的原因是re.sub
返回 new 字符串 - 字符串在Python中是不可变的,因此re.sub
无法修改您现有的字符串。
答案 2 :(得分:4)
for i, num in enumerate(mylist):
mylist[i] = num.replace(':','')
答案 3 :(得分:0)
您必须在列表中插入re.sub的返回。以下是新列表。但你也可以为mylist做到这一点。
mylist = ['12:01', '12:02']
tolist = []
for num in mylist:
a = re.sub(':', '', num)
tolist.append(a)
print tolist
答案 4 :(得分:0)
答案 5 :(得分:0)
您还可以使用map
调用代替列表理解:
mylist = ['12:01', '12:02']
map(lambda f: f.replace(':', ''), mylist)
返回:
['1201', '1202']