2013-12-09 51 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

相關問題