字符串转换遇split().reverse()返回null的原因及无循环实现方案咨询
问题解答
为什么 print(a1.split(',').reverse()) 输出 None?
这是Python列表方法的一个常见小坑:reverse()是原地修改列表的方法——它直接把原列表的顺序反转,但不会返回任何新列表,所以方法的返回值是None。你直接打印这个方法调用的结果,自然就得到None啦。
如果想看到反转后的列表,你可以这样做:
parts = a1.split(',') parts.reverse() print(parts) # 或者用切片生成新的反转列表(不修改原列表,更推荐) print(a1.split(',')[::-1])
不过要注意,就算你反转了split后的列表,也只是调换了两个键值对的位置,并没有实现你需要的键值互换,所以这只是解决了print返回None的问题,还没达到最终目标。
不写显式循环实现键值对转换
要把每个'key:value'格式的片段转换成'value:key',我们可以用split、map(或者列表推导)和join组合实现,完全不用写for/while循环:
实现代码
a1 = "'redis_import':'start','redis_import':'dim_user_level'" # 拆分→处理每个键值对→拼接 result = ','.join(map(lambda seg: ':'.join(seg.split(':')[::-1]), a1.split(','))) print(result)
一步步解释
- 先把原字符串按逗号拆分:
a1.split(',')得到["'redis_import':'start'", "'redis_import':'dim_user_level'"] - 用
map遍历每个片段,对每个片段做三件事:- 按冒号拆分:
seg.split(':')把单个片段拆成键和值的列表,比如"'redis_import':'start'"变成["'redis_import'", "'start'"] - 反转列表:
[::-1]把上面的列表倒过来,得到["'start'", "'redis_import'"] - 重新拼接:
':'.join(...)把反转后的列表拼成"'start':'redis_import'"
- 按冒号拆分:
- 最后用逗号把所有处理好的片段拼接成最终字符串。
运行后就能得到你想要的结果:"'start':'redis_import','dim_user_level':'redis_import'"
如果你觉得lambda不够直观,也可以用列表推导(它属于语法糖,不算显式循环):
result = ','.join([':'.join(seg.split(':')[::-1]) for seg in a1.split(',')])
内容的提问来源于stack exchange,提问作者SuperDelta
相关产品推荐
相关产品推荐

