1

我想编写一个函数,它接受一个L元组列表(一个例子可能是L = [(1,0,0), (1,1,0)]),然后循环通过L为. 所以理想情况下,在这个 for 循环结束时,. 然后我将把元组变成列表,但我搜索了一下,发现我可以做到。我怎样才能完成第一部分呢?t{0}.format(i)iLt1 = (1,0,0), t2 = (1,1,0)t1 = list(t1)

4

1 回答 1

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)

但实际上,动态命名变量有什么用?它们很难编程,因为直到运行时你才知道它们的名字。(您可能(正确或错误地)猜测有 a t1,但有 at10吗?)

使用字典要好得多:

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

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

使用 adict您所有的“变量”都捆绑在, 中t,并且您确切知道 , 中的“变量”是什么tt.keys()并且它们不会污染您的全局命名空间。

但是,再想一想,你真的需要一个dict吗?L自己还不够吗?访问 LwithL[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
于 2013-05-31T14:45:39.700 回答