33

如果我有一份清单,请说:

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 不是创建动态变量的有效方法,但我想做的是根据计数创建var0, var1,var2等。var3

编辑::

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

4

8 回答 8

55

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

但是,以下语句可以正常工作并且符合预期

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) )
于 2016-01-07T11:41:29.753 回答
30

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

但假设你有充分的理由,这里是如何在 python 中做到这一点:

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

print var2  # etc.

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

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

于 2013-10-10T15:37:11.827 回答
12

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

于 2013-10-10T15:37:01.887 回答
3

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

wedges = ["Panther", "Ali", 0, 360]
a,b,c,d = str(wedges).split()
print a,b,c,d
于 2015-11-19T01:00:10.300 回答
1

相反,请执行以下操作:

>>> var = ['xx','yy','zz']
>>> var[0]
'xx'
>>> var[1]
'yy'
>>> var[2]
'zz'
于 2013-10-10T15:38:29.167 回答
0

应该这样做(尽管不推荐使用 exec ):

for num in range(len(your_list)):
    exec('var'+str(num)+' = your_list[num]')
于 2021-07-14T12:23:24.043 回答
0

我找到了一个不错的应用程序。我有一堆 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])
于 2019-05-09T20:25:26.247 回答
0

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

于 2018-02-03T00:56:27.743 回答