Python技术疑问:能否用列表推导式替代指定for循环?
用列表推导式替代正则处理的for循环可行吗?
当然可以用列表推导式实现你这个场景的逻辑,不过你之前尝试的写法有个关键问题——最后那个if my_regex.search(value)会过滤掉所有不匹配正则的value,但原for循环是把这些不匹配的项原封不动保留下来的,这就导致结果和原逻辑不一致了。
先回顾下你的原循环逻辑:遍历DataFrame指定列的每个值,用正则匹配,匹配到就替换掉捕获组的内容,没匹配到就直接保留原值,所有项都要保留。
要转成列表推导式,核心是要在推导式里给match变量赋值,同时避免重复执行正则搜索。这里有两种靠谱的写法:
写法一(高效推荐)
temp = [value.replace(match.group(1), '') if match else value for value in my_dataframe[my_col] for match in [my_regex.search(value)]]
这里的第二个for match in [my_regex.search(value)]其实是个小技巧:把正则搜索的结果放进一个单元素列表,然后遍历这个列表,相当于给match变量赋值,而且整个过程只执行一次正则搜索,效率更高。
写法二(可读性稍好但效率略低)
temp = [value.replace(my_regex.search(value).group(1), '') if my_regex.search(value) else value for value in my_dataframe[my_col]]
这种写法更直观,但缺点是对每个匹配成功的value会执行两次正则搜索,数据量大的时候会影响效率,所以更推荐第一种写法。
至于要不要用列表推导式替代原for循环?如果你的逻辑就这么简单,列表推导式会更简洁;但如果之后可能要给逻辑加更多判断或处理,原for循环的可读性会更好,维护起来更方便。
内容的提问来源于stack exchange,提问作者ekjcfn3902039
相关产品推荐
相关产品推荐

