在循环内创建以前未定义的新变量

时间:2014-02-18 13:01:39

标签: python loops

例如,

在这个循环中:

lst=[1,2,3,4,5,6,7,8,9]

for i in lst:
    print i

不是只打印i,而是每次都有一种方法将i指向一个新变量? 所以我会得到类似的东西:item1 = 1 item2 = 2 item3 = 3等等。

或者有没有办法创建新变量而不知道我需要多少?

例如,列表lst中的每个项目的变量,或者用户给出的任何其他列表(使用任何其他len())。

对于所有想知道的人。这样做的关键是以后能够调用变量。我的代码在列表中搜索符合certein标准的段,我希望以后能够到达段,或者至少为用户能够访问段。我是编程新手,所以如果你有更好的方法,请告诉我。

3 个答案:

答案 0 :(得分:0)

不要这样做。您已经存储了数据。不要执行item1,而只需执行lst[0]

item2 - > lst[1]

item3 - > lst[2]

itemn - > lst[n-1]

编辑2:

试试这个:

>>> from itertools import groupby
>>> def split_condition(x):
        return (x == 3)
>>> [list(g) for k, g in groupby([1, 2, 3, 4, 5, 6, 3, 4, 3, 5], split_condition)]
[[1, 2], [3], [4, 5, 6], [3], [4], [3], [5]]

答案 1 :(得分:0)

您希望根据特定条件对数据进行分区。假设您有一个函数figure_out_class,它为您提供数据所属类的描述。然后你可以使用字典来做到这一点:

partitions = {}
for i in lst:
    key = figure_out_class(i)
    if key not in partitions:
        partitions[key] = []
    partitions[key].append(i)

这是“那里的关键吗?”可以避免首先使用您需要的类或使用defaultdict填充字典:

from collections import defaultdict
partitions = defaultdict(list)
for i in lst:
    key = figure_out_class(i)
    partitions[key].append(i)

有关实际示例,请说您希望将数字归类为oddeven

def figure_out_class(number):
    return ("odd" if number % 2 else "even")

将该函数应用于上一段代码可以得到:

>>> partitions['odd']
[1, 3, 5, 7, 9]
>>> partitions['even']
[2, 4, 6, 8]

答案 2 :(得分:-1)

您可以这样做:

lst=[1,2,3,4,5,6,7,8,9]

for i in xrange(len(lst)):
    exec('item%d=%d' % (i, lst[i]))

将创建变量item0,item1 ...所有值都等于列表中的各个位置。

虽然我没有看到这一切:)