假设我有一个数组/列表要比较。在我更熟悉的语言中,我会这样做
for (int i = 0, i < mylist.size(); i++)
for (int j = i + 1, j < mylist.size(); j++)
compare(mylist[i], mylist[j])
这确保了我们只比较每一对。对于某些上下文,我正在对列表中包含的一些对象进行碰撞侦测。对于检测到的每个碰撞,一个描述碰撞的小“碰撞”对象被附加到一个列表中,然后另一个例程循环通过解决每个碰撞(取决于两个碰撞对象的性质)。显然,我只想报告一次每次碰撞。
既然 Python 喜欢使用迭代器而不是遍历索引,那么 pythonic 的方法是什么呢?
我有以下(bug)代码:
for this in mylist:
for that in mylist:
compare(this, that)
但是很明显每次碰撞都会被检测到两次,这就导致了一些奇怪的行为,当我们试图解决它们的时候。那么 Python 的解决方案是什么呢?