如何迭代创建新变量来存储列表的第i个值

时间:2013-05-31 14:40:59

标签: python loops lambda

我想写一个函数,它带有L,一个元组列表(一个例子可能是L = [(1,0,0), (1,1,0)]),并循环遍历L来创建一个新变量{{1} } t{0}.format(i)中的i条目。理想情况下,在for循环结束时L。然后我将把元组变成列表,但我用Google搜索,发现我可以做t1 = (1,0,0), t2 = (1,1,0)。我怎么能完成第一部分呢?

1 个答案:

答案 0 :(得分:3)

好吧,你可以制作这样的全局变量:

L = [(1,0,0), (1,1,0)]

def make_vars(L):
    for i, item in enumerate(L, start=1):
        globals()['t{0}'.format(i)] = item

make_vars(L)
print(t1)
# (1, 0, 0)

但实际上,动态命名变量有什么用呢?它们很难编程,因为在运行之前你不知道它们的名字。 (您可能猜错(正确或错误)有t1,但是有t10吗?)

使用dict要好得多:

def make_vars2(L):
    return dict(enumerate(L, start=1))

t = make_vars2(L)
print(t[1])
# (1, 0, 0)

dict t所有“变量”都捆绑在t中,您确切知道t.keys()dict中的“变量”是什么不污染你的全局命名空间。

然而,第二个想法,你真的需要一个L吗? L本身不够吗?使用L[i]访问t[i+1]中的项目比使用In [3]: %timeit t[1] 10000000 loops, best of 3: 66.1 ns per loop In [4]: %timeit L[0] 10000000 loops, best of 3: 42.8 ns per loop 访问相同项目更快:

{{1}}