Это может быть не самый элегантный способ, но это первое, о чем я мог подумать:
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 и добавляете их в список, затем переходите к следующим пяти и так далее.
Если размер вашей сетки заранее неизвестен, вы можете сделать это несколькими различными способами. Если ваша сетка всегда идеально квадратная, вы можете найти квадратный корень из вашего количества звезд:
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 более элегантный :)
person
autoKarma
schedule
15.01.2015