Python:根据列表过滤列表

时间:2020-06-05 20:50:06

标签: python list

我有一个列表预测[0,1,0,....]和一个列表结果[0,0,1,...]。我想创建一个结果为1的所有预测的列表

我尝试过:

filtered_list = [predictions[i] for i in predictions if outcome[i]==1]

不幸的是,结果列表为空。

我在做什么错? 编辑:我想我已解决问题-不确定,因为我无法审核结果

filtered_list = [i for i in predictions if outcome[i]==1]

3 个答案:

答案 0 :(得分:1)

使用枚举:

[i for c,i in enumerate(predictions) if outcome[c]==1]

现在您正在按值而不是索引建立索引,这就是为什么它不起作用

答案 1 :(得分:1)

i是实际预测,而不是索引。您需要遍历索引才能将i与两个列表一起使用。

# Working, but meh. See below
filtered_list = [predictions[i] for i in range(len(predictions))
                  if outcome[i] == 1]

但是,更好的解决方案是并行地迭代两个列表的元素,从而完全避免使用索引。

filtered_list = [pred for pred, outcome in zip(predictions, outcomes) 
                  if outcome == 1]

答案 2 :(得分:1)

如果predictionsoutcomes的长度相同,则可以使用zip()

[prediction for prediction, outcome in zip(predictions, outcome) if outcome==1]

否则,只需更改zip()模块的功能zip_longest()的{​​{1}}。