這可能不是最優雅的方式,但它是我能想到的第一件事就是:
def by_y(match):
return match.y
stars = findAll(imageOfStars)
sorted_stars_y = sorted(stars, key=by_y)
finalStars = []
count = 0
for x in range(5): #if you know your grid is 5x5
finalStars.append(sorted(sorted_stars_y[count:count + 5])) #see explanation, if needed
count += 5
for x in finalStars:
click(x)
解釋:從您的例子中,第一五顆星應該有匹配的y值,即它們應該都是最上面的一行。所以,現在,您只需對它們的x值進行排序,然後將它們附加到列表中,然後轉到下一個五行,等等。
如果你的網格的大小事先不知道,你可以做到這一點的幾個不同ways-- 如果您的網格總是完美的正方形,你會發現你的星數的平方根:
import math #or import sqrt from math, if the square root is the only math function you need.
def by_y(match):
return match.y
stars = findAll(imageOfStars)
sorted_stars_y = sorted(stars, key=by_y)
finalStars = []
count = 0
rows = math.sqrt(len(stars))
for x in range(rows):
finalStars.append(sorted(sorted_stars_y[count:count + rows]))
count += rows
如果您的網格是不完美的正方形,還有一些其他的事情可以做,但除非這是你在找什麼,這個答案已經變得有點長,所以我們要保存以後討論:)
編輯: 既然你知道你的列數始終是5,你會發現數量像這樣的列:
rows = (len(stars)/5)
rowCount = 0
count = 0
然後你就可以使用while循環通過你的明星迭代:
while rowCount < rows:
finalStars.append(sorted(sorted_Stars_y[count:count+ 5]))
count += 5
rowCount += 1
畢竟是說,做,這將會把工作給你做,但從@Tenzin答案:)
謝謝,答案。但我不知道行數。我只知道列數,即5。 – WhiteFlameAB