如何优化Python代码,简洁获取包含目标字符串的列表名称?
嗨,我来帮你简化这段代码!首先得指出你原代码里的一个小问题:两个独立的for循环会互相覆盖结果——比如如果输入同时匹配my_car和dads_car里的词,最后只会显示dads_car,而且每次不匹配都会把whos_car重置为unknown,这显然不是你想要的。
想要实现遍历所有列表并返回匹配的列表名称,最简洁的方式是把列表和它们的名称绑定成一个字典,这样只需要一次循环就能搞定。下面是优化后的代码:
# 把列表和名称关联到字典里,方便遍历 car_lists = { "my_car": ["blue", "ford"], "dads_car": ["green", "audi"] } car_input = input('Tell me either the make or colour of your car: ').lower() whos_car = "unknown" # 遍历字典的键值对(列表名称 + 对应的列表内容) for list_name, words in car_lists.items(): # 检查输入字符串是否包含列表中的任意一个词(和你原代码逻辑一致) if any(word in car_input for word in words): whos_car = list_name # 如果要找到第一个匹配就停止循环,就加上下面这行 # break print(whos_car)
为什么这个方案更好?
- 扩展性拉满:以后要加更多汽车列表(比如
moms_car),只需要在car_lists字典里加一行,完全不用改循环逻辑 - 逻辑更清晰:避免了原代码中多次循环赋值导致的覆盖问题
- 代码更简洁:只用一个循环就完成所有检查,可读性更高
这里解释一下any(word in car_input for word in words):它会遍历当前列表里的每个词,只要有一个词包含在输入字符串中,就返回True,和你原代码里的循环判断逻辑完全一致。如果你的需求是输入的词完全等于列表中的某个词(而不是子串包含),只需要把判断改成car_input in words就行。
内容的提问来源于stack exchange,提问作者rlou
相关产品推荐
相关产品推荐

