如何统一处理嵌套列表中不同表述的TV字符串?
问题解决:统一替换嵌套列表中含TV的字符串
原代码问题分析
- 外层
if判断逻辑错误:if "TV" or "HDTV" or "Cable TV" in element等价于if ("TV") or ("HDTV") or ("Cable TV" in element),非空字符串"TV"永远为真,导致这个if条件始终成立,完全多余。 - 实际上不需要外层判断,直接遍历每个子列表的元素,检查是否包含
"TV"即可。
正确实现方案
方案1:原地修改原列表
直接遍历嵌套列表的每个元素,检查是否包含"TV",如果是就替换为"TV":
tv_list = [["TV","water","Gas","wifi"], ["HDTV","shower"],["50//TV",'sauna'],["TV with Roku","a bunch of stuff"],["Cable TV"],["suana","bathtub","Direct TV","couch","spinach"]] for sublist in tv_list: for i in range(len(sublist)): if "TV" in sublist[i]: sublist[i] = "TV" print(tv_list)
运行后结果:
[['TV', 'water', 'Gas', 'wifi'], ['TV', 'shower'], ['TV', 'sauna'], ['TV', 'a bunch of stuff'], ['TV'], ['suana', 'bathtub', 'TV', 'couch', 'spinach']]
方案2:生成新列表(推荐,避免修改原数据)
使用列表推导式更简洁,同时保留原列表不变:
tv_list = [["TV","water","Gas","wifi"], ["HDTV","shower"],["50//TV",'sauna'],["TV with Roku","a bunch of stuff"],["Cable TV"],["suana","bathtub","Direct TV","couch","spinach"]] new_tv_list = [["TV" if "TV" in item else item for item in sublist] for sublist in tv_list] print(new_tv_list)
这个写法符合Python简洁风格,且不会修改原始的tv_list,适合需要保留原数据的场景。
说明
不管是HDTV、Cable TV、Direct TV还是带前缀/后缀的TV表述,只要字符串中包含"TV"子串,就会被统一替换为"TV",无需穷举所有可能的表述,完美覆盖需求。
内容的提问来源于stack exchange,提问作者Ghostinshell
相关产品推荐
相关产品推荐

