Python-嵌套在地图中的过滤器会产生意外的输出

如何解决Python-嵌套在地图中的过滤器会产生意外的输出

我有一个文件名(字符串)列表和一组由浮点数组成的ls。最初,我想根据预定的表达式过滤与ls的每个元素匹配的所有文件: 我将所有实际上是整数的浮点数转换为整数,并将其输入.format中以创建适当的搜索字符串(exprs)。这将产生预期的字符串序列。我现在想使用re.search过滤“文件”,但是据我了解,我需要为exprs的每个输出使用不同的过滤器。所以我将其嵌套在map函数中:

t = 'Matrix'
exprs = map('{}_spike_{}_D1_1'.format,cycle([t]),(int(x) if x.is_integer() else x for x in ls))
y = map(lambda f:filter(lambda i : re.search(f,i),files),exprs)

Print(next(exprs))产生预期的输出,即'Matrix_spike_50_D1_1'。如果我“冻结” re.search中的表达式,即通过执行b = next(exprs)re.search(b,[...]),我将得到预期的输出(即正确选择的文件名)。 但是,当我尝试使用map消耗exprs的所有输出并返回结果filter([...])时,我得到了

  1. 过滤器对象而不是地图对象
  2. 两个相同过滤器对象,当通过while True进行详尽运行时,捕获所有StopIterations并恢复

如何修改此设置以返回过滤器为每个exprs返回的文件?

解决方法

如果我正确理解了您的问题,那么您会看到以下文件列表:

riscv32-unknown-elf-gcc -march=rv32im -mabi=ilp32 -nostartfiles test.c -Wl,-T,${own_linker_script }

和浮点数列表,这些浮点数应为整数(但可能不是全部):

files = ['a','b','Matrix_spike_2_D1_1','c','Matrix_spike_4_D1_1']

ls = [1.1,2.0,3.0,4.0,5.0] 整数列表中,构造名称'Matrix_spike_2_D1_1','Matrix_spike_3_D1_1'等,然后从ls列表中选择满足{{1 }}。当然,不使用filesrex.search锚点的方法search不会进行完全匹配,因此我想知道您是否真的打算使用^方法。 / p>

首先,您有:

$

我相信这可以简化为:

fullmatch

请注意,我只是从t = 'Matrix' exprs = map('{}_spike_{}_D1_1'.format,cycle([t]),(int(x) if x.is_integer() else x for x in ls)) 中选择整数,我认为这是您的意图。按照您的方法,我认为最简单的补救方法是定义一个函数exprs = map('Matrix_spike_{}_D1_1'.format,(int(x) for x in ls if x.is_integer())

ls

打印:

filter_func

或者采用更具“功能性”但可能效率较低的方法:

import re


ls = [1.1,5.0]
files = ['a','Matrix_spike_4_D1_1']
exprs = list(map(re.compile,map('Matrix_spike_{}_D1_1'.format,(int(x) for x in ls if x.is_integer()))))

def filter_func(f):
    for expr in exprs:
        if expr.search(f):
            return True
    return False

matched_files = list(filter(filter_func,files))
print(matched_files)

打印:

['Matrix_spike_2_D1_1','Matrix_spike_4_D1_1']

但是我相信您的方法并不是最有效的。您应该改为对import re import operator import functools ls = [1.1,(int(x) for x in ls if x.is_integer())))) filter_func = lambda f: functools.reduce(operator.or_,map(lambda expr: bool(expr.search(f)),exprs),False) matched_files = list(filter(filter_func,files)) print(matched_files) 列表中的每个元素执行单个正则表达式搜索。在上面的示例中,该正则表达式为:

['Matrix_spike_2_D1_1','Matrix_spike_4_D1_1']

在上面的正则表达式中,您将files列表中的每个元素与您要查找的所有4个可能的文件名匹配。这样可以将代码减少为:

rex = re.compile('Matrix_spike_(?:2|3|4|5)_D1_1')

打印:

files

如果您要对文件名进行完全匹配(相等),那么以下代码将是最有效的,因为它会将您要查找的名称添加到集合中,并且每个比较都将是恒定时间查找:

import re


ls = [1.1,'Matrix_spike_4_D1_1']
sub_rex = '|'.join(str(int(x)) for x in ls if x.is_integer())
rex = re.compile('Matrix_spike_(?:' +  sub_rex + ')_D1_1');
matched_files = list(filter(rex.search,files))
print(matched_files)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res