所以,当我想要并认为是[1,1,1]时,我不明白为什么我的输出返回[1、1、3、1、3]。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
House house = (House) o;
return Objects.equals(address, house.address) && Objects.equals(color, house.color);
}
答案 0 :(得分:1)
如果您使用列表理解来检查列表元素并仅返回所需内容,它将变得更加干净。
the_list = [1, 2, 1, 2, 3, 1, 2, 3, 4]
target = 1
new_list = [i for i in the_list if i == target]
列表推导更具可读性,因为其意图是明确的。循环可能用于执行许多不同的操作,例如更复杂的聚合或更多处理任务。相比之下,列表理解仅是要做一件事,那就是建立一个新列表。
答案 1 :(得分:1)
从特定索引的列表中删除项目时,指定索引之后的所有项目都向前移动1,因为列表中没有空格,因此在删除索引处的2
之后例如,1
在下一次迭代中,x
以前在索引2
处将变成索引2
的{{1}},因此您自己的{ {1}}变量将指向错误的项目。
要就地从列表中删除项目,您应该从列表末尾开始倒数,以便删除项目后重新索引列表不会影响{{1} }计数器:
3
这样:
index
将输出:
index
但是请记住,从列表中删除项目本质上效率低下,因为它必须平均移动时间为 O(n),因此必须将项目移动到给定索引之后,因此删除多个项目列表中的变量变得复杂。使用列表理解通过仅保留等于目标值的项目从旧列表构造新列表会更加有效。因此,即使上面的代码显示了如何正确地从列表中删除项目,您实际上也不应在任何生产代码中使用它。