繁体   English   中英

如何将列表的每个元素分配给一个单独的变量?

[英]How to assign each element of a list to a separate variable?

如果我有清单,请说:

ll = ['xx','yy','zz']

我想将此列表的每个元素分配给一个单独的变量:

var1 = xx
var2 = yy
var3 = zz

在不知道列表有多长的情况下,我该怎么做? 我试过了:

max = len(ll)
count = 0
for ii in ll:
    varcount = ii
    count += 1
    if count == max:
        break

我知道 varcount 不是创建动态变量的有效方法,但我想要做的是根据计数创建var0var1var2var3等。

编辑::

没关系,我应该开始一个新的问题。

一般来说,对于大量的列表元素/变量,建议使用那种编程。

但是,以下语句按预期工作正常

a,b,c = [1,2,3]

这被称为“解构”。

在某些情况下,它可以为您节省一些代码行,例如,我将 a、b、c 作为整数并希望它们的字符串值为 sa、sb、sc:

sa, sb,sc = [str(e) for e in [a,b,c]]

或者,甚至更好

sa, sb,sc = map(str, (a,b,c) )

这样做不是一个好主意; 定义变量后,您将如何处理它们?

但是假设你有一个很好的理由,下面是如何在 python 中做到这一点:

for n, val in enumerate(ll):
    globals()["var%d"%n] = val

print var2  # etc.

这里, globals()是作为字典呈现的本地命名空间。 编号从零开始,就像数组索引一样,但您可以告诉enumerate()从 1 开始。

但同样:这不太可能对您有用。

您应该回过头来重新思考为什么“需要”动态变量。 很有可能,您可以通过循环遍历列表或将其切成块来创建相同的功能。

如果项目的数量没有改变,您可以将列表转换为字符串并将其拆分为变量。

wedges = ["Panther", "Ali", 0, 360]
a,b,c,d = str(wedges).split()
print a,b,c,d

相反,请执行以下操作:

>>> var = ['xx','yy','zz']
>>> var[0]
'xx'
>>> var[1]
'yy'
>>> var[2]
'zz'

我假设您通过 SQL 查询获取列表。 为什么你不能承诺一个长度? 这样,对我来说,很明显您希望获取这些值并分别使用新获取的列表中的每个值执行其他 SQL 命令。 如果您从 SQL 的角度来看,这不是一个偏离概念的方法,如果我是正确的,我将提供语法。 但是,您无需使用此解决方案创建单独的变量名称,也不会失去您正在努力实现的多功能性。

我找到了一个不错的应用程序。 我有一堆 csv 文件,我想以它们的名字保存为数据框:

all_files = glob.glob(path + "/*.csv")
name_list = []
for f in all_files:
    name_list.append(f[9:-4])
for i,n in enumerate(name_list):
    globals()[n] = pd.read_csv(all_files[i])

这应该可以(尽管不推荐使用 exec ):

for num in range(len(your_list)):
    exec('var'+str(num)+' = your_list[num]')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM