如何避免列表重复选取同一元素?关联列表匹配异常解决
问题分析与解决方法
你的代码之所以得到重复的[1,1],核心问题是**B.index(i)方法只会返回列表中第一个匹配元素的索引**。当循环到B里第二个23时,它依然返回第一个23的索引0,所以重复取到了A[0]对应的产品1。
解决方法1:遍历索引直接匹配
直接遍历列表的索引范围,通过索引同时访问A和B的对应元素:
A = [1,2,3,4,5,6,7] B = [23,25,34,23,24,10,45] Prod_23 = [] for idx in range(len(B)): if B[idx] == 23: Prod_23.append(A[idx])
解决方法2:用enumerate同时获取索引和元素
enumerate可以在遍历B时同时拿到当前元素的索引和值,写法更简洁:
A = [1,2,3,4,5,6,7] B = [23,25,34,23,24,10,45] Prod_23 = [] for idx, price in enumerate(B): if price == 23: Prod_23.append(A[idx])
解决方法3:列表推导式(一行完成)
Python中处理这类筛选场景最常用的方式,代码简洁且高效:
A = [1,2,3,4,5,6,7] B = [23,25,34,23,24,10,45] Prod_23 = [A[idx] for idx, price in enumerate(B) if price == 23]
以上三种方法最终得到的Prod_23结果都是[1,4],完全符合预期。
内容的提问来源于stack exchange,提问作者czy
相关产品推荐
相关产品推荐

