基于条件从两个列表筛选元素的技术实现求助
解决列表元素提取配对问题
先明确要做的事:
- 遍历列表
x,找出所有包含1的元素 - 每个符合条件的元素,取它的前一个元素
- 把这个前一个元素和列表
y里对应位置元素的第二个值配对(x里第n个含1的元素,对应y里第n个元素)
给定的原始数据:
x = [['a', 3], ['b', 1], ['a', 1], ['b', 3], ['a', 4], ['b', 1], ['a', 1], ['b', 3], ['a', 2], ['b', 1]] y = [['b', 9], ['a', 22], ['b', 10], ['a', 15], ['b', 20]]
你要的预期结果:
result = [[['a', 3], 9], [['b', 1], 22], [['a', 4], 10], [['b', 1], 15], [['a', 2], 20]]
无缩进错误的代码实现
下面是逻辑清晰、没有缩进问题的代码:
x = [['a', 3], ['b', 1], ['a', 1], ['b', 3], ['a', 4], ['b', 1], ['a', 1], ['b', 33], ['a', 2], ['b', 1]] y = [['b', 9], ['a', 22], ['b', 10], ['a', 15], ['b', 20]] result = [] # 先把x中所有含1元素的前一个元素收集起来 prev_elements = [] # 从索引1开始遍历,避免第一个元素没有前一个的情况 for i in range(1, len(x)): if 1 in x[i]: prev_elements.append(x[i-1]) # 把收集到的元素和y对应位置的第二个值配对 for idx, elem in enumerate(prev_elements): # 加个判断防止y长度不够导致报错 if idx < len(y): result.append([elem, y[idx][1]]) print(result)
运行这段代码,输出的结果和你预期的完全一致。
代码简单解释
- 收集前一个元素:从x的第二个元素(索引1)开始遍历,检查当前元素里有没有1,有的话就把它的前一个元素存起来
- 配对数值:用
enumerate拿到收集到的元素的索引,对应去y里找同位置的元素,取它的第二个值,和之前存的元素组成小列表放进结果里 - 防报错处理:加了
idx < len(y)的判断,要是y的元素数量比x里含1的元素少,不会因为索引越界报错
内容的提问来源于stack exchange,提问作者Alghai29
相关产品推荐
相关产品推荐

