Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何迭代创建新变量以存储列表的第i个值_Python_Loops_Lambda - Fatal编程技术网

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

Python 如何迭代创建新变量以存储列表的第i个值,python,loops,lambda,Python,Loops,Lambda,我想写一个函数,它接受L,一个元组列表(例如L=[(1,0,0),(1,1,0)]),并循环通过L来创建一个新变量t{0}。格式(I)用于L中的第I项。理想情况下,在for循环的末尾,t1=(1,0,0),t2=(1,1,0)。然后我将把元组转换成列表,但我在谷歌上搜索了一下,发现我可以只做t1=list(t1)。但是如何完成第一部分呢?好吧,您可以创建如下全局变量: L = [(1,0,0), (1,1,0)] def make_vars(L): for i, item in enu

我想写一个函数,它接受
L
,一个元组列表(例如
L=[(1,0,0),(1,1,0)]
),并循环通过
L
来创建一个新变量
t{0}。格式(I)
用于
L
中的第
I
项。理想情况下,在for循环的末尾,
t1=(1,0,0),t2=(1,1,0)
。然后我将把元组转换成列表,但我在谷歌上搜索了一下,发现我可以只做
t1=list(t1)
。但是如何完成第一部分呢?

好吧,您可以创建如下全局变量:

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[i]
访问
L
中的项目比使用
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

return dict(enumerate(L,start=1))
甚至
return{i:list(v)for i,v in enumerate(L,start=1))}
这非常有效,谢谢。实际上,我一直在研究是否可能使用
fromkeys
来实现它,即:对于范围(4)中的I:varlist.append(t(I))>>varlist['t0','t1','t2','t3']>>dict.fromkeys(varlist){'t1':None,'t0':None,'t3':None,'t2':None}但这很有效。但是,我的
列表
解决方案似乎不起作用。我可以问你一个关于如何将像
(1,0,0,0)
这样的元组转换成像
[1,0,0,0]
这样的列表的技巧吗?@JonClements:谢谢你的改进@JJR只是使用
list(你的元组)
@JonClements出于某种原因当我尝试这样做时,它给了我一个奇怪的输出:
lt=[]对于t中的键:lt.append(list(t[key])
给了我
[(0,1)],[(0,1),(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1)]