2013-12-09 52 views
0

我需要从3个列表中创建一个长文本字符串。该文本字符串必须采用非常特定的格式,每个列表中的元素由空格分隔,每个组后面都有一个分号。下面脚本应运行:Python:如何在for循环的每次迭代中创建新变量?

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项目)。

理想地,这可以创建这样行1,行2,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;”

感谢所有,...

+5

动态命名几乎总是一个坏主意。通常使用'dict'好多了。 (另外,你的代码可以通过使用'zip'清理一下:-) – mgilson

+0

'bs'应该在那里做什么? –

+0

在这里看起来像'list'可能会更好。我不认为这些项目真的需要基于'reclassInt'命名;它看起来像所有真正需要的是,他们是按顺序和索引访问。 – user2357112

回答

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

哇噢,这是完全破坏他的代码。真棒XD – aIKid

+0

我添加到原始问题,显示我需要的确切语法。我没有得到这个工作。谢谢... – therMapper

+0

谢谢,你的1行完成了这一切。 – therMapper

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) 
+0

不错的解决方案! – samrap

+0

我尝试这样做,但是当我添加打印命令longStrings和它仍然空阱{} – therMapper

相关问题