Python 将函数的返回变量追加到不同的列表中

Python 将函数的返回变量追加到不同的列表中,python,numpy,Python,Numpy,将函数返回的变量(不止一个)附加到不同列表的python方法是什么 假设我们得到一个函数,如: def func(): return np.random.randint(0, 10), np.random.randint(10, 20) 最简单的非python方法是: l1 = [] l2 = [] for i in range(x): # do something # do something else a, b = func() l1.append

将函数返回的变量(不止一个)附加到不同列表的python方法是什么

假设我们得到一个函数,如:

def func():
    return np.random.randint(0, 10), np.random.randint(10, 20)
最简单的非python方法是:

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

或者使用提供的解决方案提取项目。

根据具体情况,这可能会更干净:

def func(l1, l2):
    l1.append(np.random.randint(0, 10)); l2.append(np.random.randint(10, 20))
    return l1,l2

一种方法是创建
主列表
,然后转置:

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]
编辑

[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))

为什么使用您的第一个解决方案不是“Pythonic”?但无论如何,在大多数情况下,使用numpy更好。在不需要转置方法的情况下,您可以使用numpy getter[:,0]或[:,1]来获取整个“列”。在某些情况下,为了可读性、可维护性和功能性,应该牺牲“Pythonicness”(读取:code golf)。
test()
应该是
func()
@Ravexina,看看下面的答案是否有用?@DirtyBit你的答案很好,但是它与我在问题中提到的链接中的答案非常相似。谢谢;)您的
zip
-列表理解和列表后解包的变体:
A,b=list(zip(*[fn()表示范围(4)])
@hpaulj Done!:)