您已经很接近了,如果您刚刚开始,我将向您展示一种可能更直观的替代方法:
sets = [(myList[i-1], myList[i]) for i in range(len(myList)) if myList[i] == 9]
获取列表长度范围内的索引,如果i位置的值等于9,则抓取相邻元素。
结果是:
sets
[(8, 9), (4, 9), (7, 9)]
这效率低于其他方法,但我决定取消删除它以向您展示一种不同的方法。您可以改用enumerate() 来加快速度:
sets = [(myList[i-1], j) for i, j in enumerate(myList) if j == 9]
请注意 在 myList[0] = 9 没有zip 的理解的行为和理解的行为的边缘情况下与zip 是不同的。
具体来说,如果myList = [9, 1, 8, 9, 2, 4, 9, 6, 7, 9, 8] 那么:
[(myList[i-1], myList[i]) for i in range(len(myList)) if myList[i] == 9]
# results in: [(8, 9), (8, 9), (4, 9), (7, 9)]
同时:
[(x, y) for x, y in zip(myList, myList[1:]) if y==9]
# results in: [(8, 9), (4, 9), (7, 9)]
由您决定哪些符合您的标准,我只是指出它们在所有情况下的行为都不相同。