二维列表匹配指定字符串后对应元素加1的实现问询
实现二维列表中首个匹配子列表的元素递增
你要的这个需求其实挺直观的,核心就是找到第一个匹配指定名字的子列表,然后对第二个元素做加1操作,下面给你两种Python实现方案,都能完美满足你的需求:
方案一:基础for循环(清晰易懂)
用enumerate遍历列表,同时拿到索引和子列表,找到匹配项后直接修改第二个元素,然后立刻跳出循环(因为只需要第一个匹配项):
def increment_matching_item(lst, name): for idx, sublist in enumerate(lst): # 匹配子列表的首个元素(注意大小写,你的示例里John和john是不同的,如果要忽略大小写可以改成sublist[0].lower() == name.lower()) if sublist[0] == name: lst[idx][1] += 1 break # 找到第一个匹配项就停止遍历,提升效率 return lst # 测试示例 sample_list = [['mike', 0], ['john', 2], ['henry', 0], ['sam', 1]] # 搜索john result1 = increment_matching_item(sample_list.copy(), 'john') print(result1) # 输出: [['mike', 0], ['john', 3], ['henry', 0], ['sam', 1]] # 搜索mike result2 = increment_matching_item(result1.copy(), 'mike') print(result2) # 输出: [['mike', 1], ['john', 3], ['henry', 0], ['sam', 1]]
方案二:Pythonic写法(简洁高效)
用next()函数直接定位第一个匹配的子列表,省去手动遍历的代码,逻辑更紧凑:
def increment_matching_item(lst, name): # 找到第一个匹配的子列表,找不到就返回None match = next((sublist for sublist in lst if sublist[0] == name), None) if match: # 如果找到匹配项,直接修改第二个元素 match[1] += 1 return lst # 测试示例和上面一致 sample_list = [['mike', 0], ['john', 2], ['henry', 0], ['sam', 1]] print(increment_matching_item(sample_list.copy(), 'john')) print(increment_matching_item(sample_list.copy(), 'mike'))
额外提示
- 代码里用
copy()是为了不修改原列表,如果不需要保留原列表,可以直接传入原列表操作 - 如果需要忽略大小写匹配(比如输入'John'也能匹配'john'),把判断条件改成
sublist[0].lower() == name.lower()即可 - 如果遍历完列表都没找到指定name,两种方案都会直接返回原列表,不会抛出错误,安全性拉满
内容的提问来源于stack exchange,提问作者abercrombiefan1
相关产品推荐
相关产品推荐

