Python:如何在for循环的每次迭代中创建新变量?

时间:2013-12-09 07:45:13

标签: python

我需要从3个列表中创建一个长文本字符串。此文本字符串必须采用非常特定的格式,其中每个列表中的元素由空格分隔,并且每个组之后都有分号。下面的脚本应该运行:

import math

reclassInt = [1, 2, 3, 4, 5, 6]
minValueRange = [512, 550.0, 600.0, 650.0, 700.0, 750.0]
maxValueRange = [550.0, 600.0, 650.0, 700.0, 750.0, 755]

for numbers in reclassInt:
    newNums = numbers-1
    longString = str(minValueRange[newNums]) + " " + str(maxValueRange[newNums]) + " " + str(reclassInt[newNums]) + ";" 
    print longString

这将返回6行,第一行是:

512 550.0 1;

我想要为每个字符串设置一个变量,而不是打印这些字符串。我希望这个变量为循环的每次迭代都有一个唯一的名称(基于reclassInt项)。

理想情况下,这可以创建变量,如line1,line2,ect等于每次迭代的字符串输出。然后我可以将它们串在循环外面以获得我想要的字符串。

要明确我的最终目标是这个确切的字符串:

“512 550.0 1; 550.0 600.0 2; 600.0 650.0 3; 650.0 700.0 4; 700.0 750.0 5; 750.0 755 6;”

全部谢谢,......

2 个答案:

答案 0 :(得分:2)

这个怎么样:

>>> d = {i+1:v for i,v in enumerate(zip(minValueRange, maxValueRange))}
>>> d
{1: (512, 550.0),
 2: (550.0, 600.0),
 3: (600.0, 650.0),
 4: (650.0, 700.0),
 5: (700.0, 750.0),
 6: (750.0, 755)}

然后打印你的字符串:

>>> for k,v in d.iteritems():
...    print('{} {} {};'.format(v[0], v[1], k))
...
512 550.0 1;
550.0 600.0 2;
600.0 650.0 3;
650.0 700.0 4;
700.0 750.0 5;
750.0 755 6;

根据您的更新,将字符串放在一行中:

>>> ''.join('{} {} {};'.format(v[0], v[1], k) for k,v in d.iteritems())
'512 550.0 1;550.0 600.0 2;600.0 650.0 3;650.0 700.0 4;700.0 750.0 5;750.0 755 6;'

此外,如果这是您唯一的要求,您不需要生成字典,并且可以将所有内容合并到此:

>>> ''.join('{} {} {};'.format(v[0], v[1], k+1) for k,v in enumerate(zip(minValueRange, maxValueRange)))
'512 550.0 1;550.0 600.0 2;600.0 650.0 3;650.0 700.0 4;700.0 750.0 5;750.0 755 6;'

答案 1 :(得分:1)

为了使事情变得更简单,更好,你可以使用字典:

longStrings= {}
for numbers in reclassInt:
    newNums = numbers-1
    d["longString_%d"%numbers] = str(minValueRange[newNums]) + " " + str(maxValueRange[newNums]) + " " + str(reclassInt[newNums]) + ";" 
    bs = "ls" + str(numbers)