По этому конкретному вопросу itertools.permutations
лучше моего предложения ниже.
Один общий способ «спрятать» сложный выбор предметов для зацикливания -
переместите for
s и if
s в генератор. Таким образом, ваш основной код с важной частью do_stuff () останется плоским. Строка документа в самом генераторе может объяснить, что происходит, если это необходимо -
def check_lines(seq):
for i, line1 in enumerate(seq):
for j, line2 in enumerate(seq):
if i == j: # keep things flat
continue
if line1 not in line2:
continue
yield (line1, line2)
и на вашем основном коде:
for line1, line2 in my_permut(list_sentence):
# do_stuff code can go directly here, in a "flat enough" place:
...
Я использовал это пару раз, когда у меня был класс для представления настольной игры, такой как структура (шахматы или шахматная доска) или изображение, и использовал метод __iter__
, чтобы сразу получить x, y координаты и содержимое ячейки в виде кортежа.
Вместо:
for x in board.width():
for y in board.height():
content = board[x, y]
...
код становится:
for x, y, content in board:
...