Python实现:为列表a每个元素从列表b提取3个对应匹配元素
问题与解决方案
问题描述
给定以下Python列表:
a = [1, 4, 2, 5] b = [[[0, 1]], [[0, 2]], [[0, 3]], [[0, 4]], [[0, 5]], [[0, 6]], [[0, 2]], [[0, 3]], [[0, 4]], [[0, 5]], [[0, 4]], [[0, 5]], [[0, 6]], [[0, 4]], [[0, 2]], [[0, 2]], [[0, 4]], [[0, 4]], [[0, 5]], [[0, 5]], [[0, 5]], [[0, 1]], [[0, 5]], [[0, 1]], [[0, 1]]]
需求:遍历列表a,为a中的每个元素,找出列表b中内层列表索引1处元素等于该元素的项,每个元素仅提取3个,超出的忽略,最终输出格式如下:
[[0, 1]] [[0, 1]] [[0, 1]] [[0, 4]] [[0, 4]] [[0, 4]] [[0, 2]] [[0, 2]] [[0, 2]] [[0, 5]] [[0, 5]] [[0, 5]]
实现方案
直接通过双层循环即可完成需求,代码如下:
a = [1, 4, 2, 5] b = [[[0, 1]], [[0, 2]], [[0, 3]], [[0, 4]], [[0, 5]], [[0, 6]], [[0, 2]], [[0, 3]], [[0, 4]], [[0, 5]], [[0, 4]], [[0, 5]], [[0, 6]], [[0, 4]], [[0, 2]], [[0, 2]], [[0, 4]], [[0, 4]], [[0, 5]], [[0, 5]], [[0, 5]], [[0, 1]], [[0, 5]], [[0, 1]], [[0, 1]]] for target in a: match_count = 0 for item in b: # 匹配内层列表索引1处的元素 if item[0][1] == target: print(item) match_count += 1 # 收集够3个就停止当前目标的匹配 if match_count == 3: break
逻辑说明:
- 外层循环遍历
a中的每个目标值 - 对每个目标初始化计数器,遍历
b时逐一检查元素是否符合条件 - 每找到一个符合条件的元素就打印,计数器加1,达到3个后立即跳出当前
b的循环,转向处理a的下一个元素
内容的提问来源于stack exchange,提问作者python_ftw
相关产品推荐
相关产品推荐

