我需要从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;”
全部谢谢,......
答案 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)