Возврат нескольких выходов из функции - PullRequest
0 голосов
/ 02 сентября 2018

Я не уверен, что это возможно, но ...

Я пытаюсь написать функцию, которая будет выводить списки чисел, чтобы их можно было вводить в другую функцию. Я нахожусь в тупике, поскольку ни return, ни yield (используемые в этом контексте) не могут дать мне то, что я хочу.

def ITERATOR():
    for number in range(1,3):
        for item in itertools.permutations(range(15),number):
            yield item

Очевидно, что функция прерывается всякий раз, когда используется return, и yield возвращает все сразу. В идеале я хочу, чтобы он выводил на каждой строке:

def ITERATOR():
    for number in range(2,4):
        for item in itertools.permutations(range(15),number):
            print(item)

То есть:

(0, 1)
(0, 2)
(0, 3)
(0, 4)
(0, 5)
(0, 6)
(0, 7)
(0, 8)
(0, 9)
(0, 10)
(0, 11)
(0, 12)
(0, 13)
(0, 14)
etc...

Есть ли способ достичь этого?

Ответы [ 3 ]

0 голосов
/ 02 сентября 2018

Решение

new_tuples = []
for i in range(0, 5):
    for j in range(1, 16):
        new_tuples.append((i, j))

for i in new_tuples:
    print(i)

выход

(xenial)vash@localhost:~/python$ python3 text_seg.py 
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(0, 5)
(0, 6)
(0, 7)
(0, 8)
(0, 9)
(0, 10)
(0, 11)
(0, 12)
(0, 13)
(0, 14)
(0, 15)
(1, 1)

Комментарии

Удовлетворит ли этот подход ваши потребности? Вы можете поменять номера по своему желанию, но это позволит вам иметь list в магазине tuples и иметь возможность звонить на print.

0 голосов
/ 02 сентября 2018

Вы можете вернуть список через аргумент функции и использовать возврат функции, чтобы указать количество найденных перестановок:

import itertools

permut = []

def ITERATOR(item):
    n_permuts= 0
    for number in range(2,4):
        for item in itertools.permutations(range(15),number):
            permut.append(item)
            n_permuts+= 1
    return n_permuts

print (ITERATOR(permut))
for item in permut:
    print(item)
0 голосов
/ 02 сентября 2018

Если вы хотите вернуть список, вы можете просто сделать это:

def fct():
    return [item for item in itertools.permutations(range(15),number) for number in range(2,4)]

А для генератора

def fct():
    return (item for item in itertools.permutations(range(15),number) for number in range(2,4))
...