假设我有以下功能:
def function3(start, end):
"""Read MO information."""
config_found = False
var = []
for line in v['molecular orbital primitive coefficients']:
if line.strip() == end:
config_found = False
elif config_found:
i = line.rstrip()
var.append(i)
elif line.strip() == start:
config_found = True
var1 = [elem.strip() for elem in var]
var2 = var1[1:-1]
var3 = np.array([line.split() for line in var2])
var3 = np.asarray([list(map(float, item)) for item in var3])
return var3
假设我将其输出存储在如下变量中:
monumber1=function3('1','2')
monumber2=function3('2','3')
monumber3=function3('3','4')
等。
有没有办法让我多次执行这个函数并将输出存储在一定数量的变量中,而不必每次都手动设置变量名和函数参数?也许使用for循环?这是我的尝试,但我正在努力使其成功:
for i in xrange(70):
monumber[x] = function3([i],[i+1])
谢谢!
答案 0 :(得分:2)
问题是你使用方括号。这是应该工作的代码:
monumber = [] # make it an empty list
for i in xrange(70):
monumber.append(function3(str(i),str(i+1))) # you had string integers, so cast
对于更多Pythonic单线程,您可以使用列表理解:
monumber = [function3(str(i),str(i+1)) for i in xrange(70)]
现在已经创建了monumber
变量,我可以使用语法i
访问任何给定索引monumber[i]
的元素。一些例子:
first = monumber[0] # gets the first element of monumber
last = monumber[-1] # gets the last index of monumber
for i in xrange(10,20): # starts at i = 10 and ends at i = 19
print(monumber[i]) # print the i-th element of monumber
答案 1 :(得分:0)
你几乎得到了它。除了你应该在左侧使用i
:
monumber[i] = function3([i],[i+1])
现在,这是基本想法,但只有当monumber
已经是包含足够元素的列表时,代码才有效,否则会出现IndexError
。
我们可以动态地为其添加新值,而不是创建列表并使用占位符填充它:
monumber = []
for i in xrange(70):
monumber.append(function3([i],[i+1]))
另一个问题是,您似乎混淆了函数使用的不同类型的参数。在函数体中,start
和end
似乎是字符串,但在您的代码中,您为列表提供了一个整数。在不更改功能的情况下,您可以执行以下操作:
monumber = []
for i in xrange(70):
monumber.append(function3(str(i),str(i+1)))