map_reduce_upper

本文介绍了一种将字符串或字符串列表中的所有字符转换为小写的方法。利用Python中的map()和reduce()函数实现这一功能。具体步骤包括使用自定义函数处理每个字符,如果是大写字母,则查找对应的小写字母进行替换。

coding:utf-8

将所有字符串中的字符,全部转化为小写。即可以是一个单独的字符串,也可以是一个字符串列表。

1>先使用map()函数,将字符串中的每一个字符转化为小写;
2>再使用reduce()函数,对map()函数返回的列表进行逻辑处理;

如果是一个字符串,需要使用map()和reduce()组合;
如果是一个字符串列表,只需要map()函数就可以了;

def custom_lower(s):
    # char_lower函数是作用到map()函数的。
    def char_lower(string):
        # 将26个英文字母对应的小写字母,在字典中进行定义。
        all_char_dict = {'A':'a', 'B':'b', 'C':'c', 'D':'d', 'E':'e', 'F':'f', 'G':'g', 'H':'h', 'I':'i', 'J':'j', 'K':'k', 'L':'l', 'M':'m', 'N':'n', 'O':'o', 'P':'p', 'Q':'q', 'R':'r', 'S':'s', 'T':'t', 'U':'u', 'V':'v', 'W':'w', 'X':'x', 'Y':'y', 'Z':'z'}
        # string形参,接收的是列表中的一个字符串,而不再是某一个字符了。
        # print '=====string = ', string

        # 声明一个变量,用于记录每一次字符转化的结果
        every_char_result = ''
        # 声明一个变量,用于记录最终转化后的结果
        result = ''
        # 遍历string字符串,将其中的大写字符,转化成小写。
        for index in xrange(0,len(string)):
            char_str = string[index]
            # 判断获取的当前字符是否是大写字符,如果是则转化;反之则不转化
            # isupper():字符串内置方法,返回结果是bool类型的数据。
            if char_str.isupper() == True:
                # 以大写字符为键,从字典中取出小写字符。
                every_char_result = all_char_dict[char_str]
            else:
                every_char_result = char_str
            # 将转化后的字符和没有转化的字符,再次进行拼接,最终成为一个完整的字符串,并返回。
            result += every_char_result
        return result

    # result_string函数是作用到reduce()函数的。
    def result_string(x,y):
        return x+y

    # 判断要转化的字符串是不是list类型的
    # isinstance():用于判断一个变量是否属于某一种类型,是则返回True,不是则返回False。
    if isinstance(s, list):
        # 是list,只调用map()
        return  map(char_lower, s)
    else:
        # 不是list,需要调用map()和reduce()
        return reduce(result_string, map(char_lower, s))

res = custom_lower('AbCdEF')
print res

res = custom_lower(['OPPE', 'AbcD', 'CddEf'])
print res
<launch> <!-- Whether the start and end points are fixed --> <arg name="if_fix_final_" value="false"/> <arg name="start_x_" value="9.0"/> <arg name="start_y_" value="9.0"/> <arg name="start_yaw_" value="0.0"/> <arg name="final_x_" value="3.7"/> <arg name="final_y_" value="0.3"/> <arg name="final_yaw_" value="3.14"/> <!-- <arg name="if_fix_final_" value="true"/> --> <!-- Map resolution --> <arg name="gridmap_interval_" value="0.05"/> <arg name="odom_topic" value="/simulation/PosePub" /> <arg name="traj_topic" value="/planner/traj_poly" /> <arg name="cmd_topic" value="/simulation/PoseSub" /> <arg name="velocity_suffix" value="3ms"/> <!-- Whether the robot is allowed to see through obstacles --> <!-- <arg name="if_perspective_" value="true"/> --> <arg name="if_perspective_" value="false"/> <!-- Detection range --> <arg name="detection_range_" value="27.0"/> <!-- <arg name="detection_range_" value="7.0"/> --> <!-- Whether the robot is allowed to move --> <arg name="if_move_" value="true"/> <!-- <arg name="if_move_" value="false"/> --> <!-- Whether to limit the robot's FOV. Note: In complex environments, limiting the FOV may cause planning to fail --> <!-- <arg name="hrz_limited_" value="true"/> --> <arg name="hrz_limited_" value="false"/> <!-- FOV angle range --> <arg name="hrz_laser_range_dgr_" value="90.0"/> <!-- ICR parameters --> <arg name="ICR_yr_" value="-0.3"/> <arg name="ICR_yl_" value="0.3"/> <arg name="ICR_xv_" value="0.0"/> <!-- Whether to use the standard differential model --> <arg name="if_standard_diff_" value="false"/> <arg name="if_get_map_from_asv_" value="true"/> <node name="global_planning" pkg="plan_manager" type="global_planning" output="screen"> <rosparam file="$(find front_end)/config/jps$(arg velocity_suffix).yaml" command="load"/> <rosparam file="$(find plan_manager)/config/car$(arg velocity_suffix).yaml" command="load"/> <rosparam file="$(find back_end)/config/global_planning$(arg velocity_suffix).yaml" command="load"/> <rosparam file="$(find asv_plan_env)/config/mapsim.yaml" command="load"/> <param name="start_x" value="$(arg start_x_)"/> <param name="start_y" value="$(arg start_y_)"/> <param name="start_yaw" value="$(arg start_yaw_)"/> <param name="if_fix_final" value="$(arg if_fix_final_)"/> <param name="final_x" value="$(arg final_x_)"/> <param name="final_y" value="$(arg final_y_)"/> <param name="final_yaw" value="$(arg final_yaw_)"/> <param name="if_road_map" value="true"/> <param name="road_map_safe_dis" value="0.5"/> <rosparam file="$(find plan_manager)/config/road_map.yaml" command="load"/> <param name="if_direct_path" value="true"/> <!-- Time of replan. If the time is very large, it can be considered that re-planning is not performed --> <param name="replan_time" value="0.5"/> <!-- <param name="replan_time" value="5000"/> --> <!-- Expected computation time for the planner --> <param name="max_replan_time" value="0.3"/> <!-- Map parameters --> <param name="gridmap_interval" value="$(arg gridmap_interval_)"/> <param name="path_gridmap_interval" value="0.05"/> <param name="detection_range" value="$(arg detection_range_)"/> <param name="global_x_lower" value="-10.0"/> <param name="global_x_upper" value="10.0"/> <param name="global_y_lower" value="-10.0"/> <param name="global_y_upper" value="10.0"/> <param name="if_perspective" value="$(arg if_perspective_)"/> <param name="if_cirSupRaycast" value="false"/> <remap from="local_pointcloud" to="/laser_simulator/local_pointcloud"/> <remap from="odom" to="$(arg odom_topic)"/> <!-- Observation parameters --> <param name="hrz_limited" value="$(arg hrz_limited_)"/> <param name="hrz_laser_range_dgr" value="$(arg hrz_laser_range_dgr_)"/> <param name="ICR_yr" value="$(arg ICR_yr_)"/> <param name="ICR_yl" value="$(arg ICR_yl_)"/> <param name="ICR_xv" value="$(arg ICR_xv_)"/> <param name="if_standard_diff" value="$(arg if_standard_diff_)"/> <!-- for zhongyan--> <param name="if_get_map_from_asv" value="$(arg if_get_map_from_asv_)"/> <param name="asv_map_num" value="1"/> <param name="asv_map_1" value="$(find plan_manager)/asv/asv1.yaml"/> </node> <node name="simulator" pkg="simulator" type="simulator" output="screen"> <rosparam file="$(find plan_manager)/config/car$(arg velocity_suffix).yaml" command="load"/> <param name="start_x" value="$(arg start_x_)"/> <param name="start_y" value="$(arg start_y_)"/> <param name="start_yaw" value="$(arg start_yaw_)"/> <param name="if_add_noise" value="true"/> <param name="noise_stddev" value="0.01"/> <param name="State_Propa_rate" value="500"/> <param name="Pose_pub_rate" value="10"/> <param name="detection_range" value="$(arg detection_range_)"/> <param name="hrz_limited" value="$(arg hrz_limited_)"/> <param name="hrz_laser_range_dgr" value="$(arg hrz_laser_range_dgr_)"/> <param name="ICR_yr" value="$(arg ICR_yr_)"/> <param name="ICR_yl" value="$(arg ICR_yl_)"/> <param name="ICR_xv" value="$(arg ICR_xv_)"/> <param name="if_standard_diff" value="$(arg if_standard_diff_)"/> </node> <group if="$(arg if_move_)"> <node name="nmpc" pkg="nmpc_controller" type="nmpc" output="screen"> <rosparam file="$(find nmpc_controller)/config/mpc$(arg velocity_suffix).yaml" command="load"/> <rosparam file="$(find plan_manager)/config/car$(arg velocity_suffix).yaml" command="load"/> <param name="if_mpc" value="true"/> <remap from="~cmd" to="$(arg cmd_topic)"/> <remap from="~odom" to="$(arg odom_topic)"/> <remap from="~traj" to="$(arg traj_topic)"/> <remap from="~pose" to="/ICREKF/EKF_XYTheta"/> </node> </group> <node name="plotjuggler" pkg="plotjuggler" type="plotjuggler" output="screen" args="-l $(find plan_manager)/plotjuggler/plotjuggler.xml"/> <node name="global_map_node" pkg="simulator" type="global_map_node" output="screen"> <!-- Map input method --> <!-- 1: Read map from yaml file --> <!-- 2: Random obstacles --> <!-- 3: Get obstacles from png --> <param name="Map_input_method" value="2"/> <param name="if_boundary_wall" value="true"/> <!-- gridmap cell size --> <param name="gridmap_interval" value="$(arg gridmap_interval_)"/> <!-- Gridmap cell size sent to the radar --> <param name="laser_gridmap_interval" value="$(arg gridmap_interval_)"/> <!-- Read map parameters from yaml file --> <!-- Map file name --> <rosparam file="$(find asv_plan_env)/config/obs_exam3.yaml" command="load"/> <!-- Random obstacles --> <!-- Map file name --> <param name="start_x" value="$(arg start_x_)"/> <param name="start_y" value="$(arg start_y_)"/> <param name="start_yaw" value="$(arg start_yaw_)"/> <param name="srand_num" value="-1"/> <param name="Random/map_range/x_min" value="-10"/> <param name="Random/map_range/x_max" value="10"/> <param name="Random/map_range/y_min" value="-10"/> <param name="Random/map_range/y_max" value="10"/> <!-- Square obstacles --> <param name="Random/obstacle_box/num" value="50"/> <param name="Random/obstacle_box/length" value="0.5"/> <param name="Random/obstacle_box/safe_dis" value="2.0"/> <!-- Get obstacles from png --> <param name="Png/file_path" value="$(find asv_plan_env)/config/obs.png"/> <param name="Png/x_lower" value="-5.0"/> <param name="Png/y_lower" value="-5.0"/> </node> <group if="$(arg if_perspective_)"> <node pkg="laser_simulator" type="laser_sim_node" name="laser_simulator" output="screen"> <param name="if_perspective" value="$(arg if_perspective_)"/> <param name="pc_resolution" value="$(arg gridmap_interval_)"/> <param name="sensing_horizon" value="$(arg detection_range_)"/> <rosparam file="$(find laser_simulator)/config/perspective_laser.yaml" command="load" /> </node> </group> <group unless="$(arg if_perspective_)"> <node pkg="laser_simulator" type="laser_sim_node" name="laser_simulator" output="screen"> <param name="if_perspective" value="$(arg if_perspective_)"/> <param name="pc_resolution" value="$(arg gridmap_interval_)"/> <param name="hrz_limited" value="$(arg hrz_limited_)"/> <param name="hrz_laser_range_dgr" value="$(arg hrz_laser_range_dgr_)"/> <rosparam file="$(find laser_simulator)/config/normal_laser.yaml" command="load" /> <remap from="~laser_odom" to="/laser_simulator/laser_odom"/> </node> </group> <node name="icrekf" pkg="icrekf" type="icrekf" output="screen"> <param name="Pose_sub_Reduce_frequency_" value="1"/> <param name="state_pub_frequency" value="200.0"/> <param name="Q_x" value="0.5"/> <param name="Q_y" value="0.5"/> <param name="Q_psi" value="1.14"/> <param name="Q_yr" value="0.1"/> <param name="Q_yl" value="0.1"/> <param name="Q_xv" value="0.1"/> <param name="R_x" value="0.1"/> <param name="R_y" value="0.1"/> <param name="R_psi" value="0.1"/> <param name="init_x_yr" value="-0.25"/> <param name="init_x_yl" value="0.25"/> <param name="init_x_xv" value="0.1"/> <param name="yr_standard" value="$(arg ICR_yr_)"/> <param name="yl_standard" value="$(arg ICR_yl_)"/> <param name="xv_standard" value="$(arg ICR_xv_)"/> <remap from="ref_pose" to="/simulation/SimulatedCarState"/> <remap from="odom" to="/simulation/PoseOdomPub"/> <remap from="control" to="/simulation/ControlPub"/> <remap from="EKF_XYTheta" to="/ICREKF/EKF_XYTheta"/> <remap from="EKF_ICR" to="/ICREKF/EKF_ICR"/> <remap from="Simple_EKF_ICR" to="/ICREKF/Simple_EKF_ICR"/> </node> <node name="rviz" pkg="rviz" type="rviz" args="-d $(find plan_manager)/rviz/planner_sim.rviz" output="log"/> </launch> 注释上述代码给我xml文件
09-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值