Добавить возвращенные переменные функции в разные списки - PullRequest
0 голосов
/ 26 марта 2019

Каков питонный способ добавления возвращаемых переменных (более одной) из функции в разные списки?

Предположим, у нас есть такая функция:

def func():
    return np.random.randint(0, 10), np.random.randint(10, 20)

Самый простой непитонный способ сделать это:

l1 = []
l2 = []

for i in range(x):
    # do something
    # do something else
    a, b = func()
    l1.append(a)
    l2.append(b)

Или используя numpy:

lst = []
for i in range(x):
    # do something
    # do something else
    lst.append(func())

l1, l2 = np.array(lst).T

Или извлечение предметов с использованием предоставленных решений здесь .

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Одним из способов может быть создание master-list и затем транспонирование:

def func():
    return np.random.randint(0, 10), np.random.randint(10, 20)

masterLst = []    
for i in range(5):
    masterLst.append(func())

l1,l2 = zip(*masterLst)

print(list(l1))
print(list(l2))

ВЫХОД :

[6, 5, 8, 6, 2]
[19, 11, 19, 10, 17]

РЕДАКТИРОВАНИЕ :

Исходя из @hpaulj, вариант текущего подхода:

def func():
    return np.random.randint(0, 10), np.random.randint(10, 20)

l1,l2 = list(zip(*[func() for _ in range(4)]))

print(list(l1))
print(list(l2))
1 голос
/ 26 марта 2019

В зависимости от ситуации это может быть намного чище:

def func(l1, l2):
    l1.append(np.random.randint(0, 10)); l2.append(np.random.randint(10, 20))
    return l1,l2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...