1 回答
TA贡献1853条经验 获得超6个赞
在 Python 中,当您直接遍历一个可迭代对象时,循环变量将成为当前值,因此无需使用 and 来索引原始列表,depList[dep]而是varSuffix[var]直接使用变量:depand var.
此外,考虑str.format字符串插值,这是Python 3 的首选方法,而不是过时的、不再强调(尚未弃用)的字符串模%运算符:
for dep in depList:
for var in varSuffix:
spssSyntax += '''REGRESSION
/MISSING LISTWISE
/STATISTICS COEFF OUTS R
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT {0}
/METHOD=FORWARD iv1 iv2 iv3
/SAVE PRED(PRE_{1})
'''.format(dep, var)
或者,考虑使用 将两个列表组合为一个循环itertools.product,然后使用列表推导来构建字符串,join而不是使用 连接循环迭代+=:
from itertools import product
import spss,spssaux
dependent = ['dv1', 'dv2', 'dv3', 'dv4', 'dv5']
depList = spssaux.VariableDict(caseless = True).expand(dependent)
varSuffix = [1,2,3,4,5]
base_string = '''REGRESSION
/MISSING LISTWISE
/STATISTICS COEFF OUTS R
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT {0}
/METHOD=FORWARD iv1 iv2 iv3
/SAVE PRED(PRE_{1})
'''
# LIST COMPREHENSION UNPACKING TUPLES TO FORMAT BASE STRING
# JOIN RESULTING LIST WITH LINE BREAKS SEPARATING ITEMS
spssSyntax = "\n".join([base_string.format(*dep_var)
for dep_var in product(depList, varSuffix)])
现在,如果您需要在等长列表之间按元素并行迭代,请考虑zip代替product:
spssSyntax = "\n".join([base_string.format(d,v)
for d,v in zip(depList, varSuffix)])
或者enumerate对于索引号:
spssSyntax = "\n".join([base_string.format(d,i+1)
for i,d in enumerate(depList)])
添加回答
举报