需要帮助找出一个循环来缩短一些代码的长度

时间:2019-11-07 05:16:38

标签: python loops

我正在python中运行线性回归模型。我的代码的一部分使用下面引用的代码。我大约有30次迭代;每个代表源文件中的自变量或列。

我正在尝试缩短它,以便合并我的代码。有谁知道如何在循环中运行这种事情?

可以将“ ABC”,“ DEF”,“ GHI”放入某种列表中(在我的代码中会有更多的列表),然后在该列表中循环。否则那将是理想的。

xlist = []; xlist2 = []
###################################################
if x1.value == False:
    pass
else:
    x1 = 'ABC'
    xlist.append(x1)
    xlist2.append(x1)
###################################################    
if x2.value == False:
    pass
else:
    x2 = 'DEF'
    xlist.append(x2)
    xlist2.append(x2)
###################################################
if x3.value == False:
    pass
else:
    x3 = 'GHI'
    xlist.append(x3)
    xlist2.append(x3)
###################################################

2 个答案:

答案 0 :(得分:1)

假设x1,x2和x3已经存在(如问题中所示):

xlist1 = []
xlist2 = []

items = [(x1, 'ABC'), (x2, 'DEF'), (x3, 'GHI')]
for x, val in items:
    if x.value:
        xlist1.append(val)
        xlist2.append(val)

关键是要以某种方式关联值x1'ABC'x2'DEF';以及x3'GHI'

答案 1 :(得分:0)

根据设置,您可以执行以下操作:

xvalues={'x2': 'DEF'}
values = ['ABC' ,'DEF', 'GHI' ]
items = ['x1', 'x2', 'x3' ]
for x in items:
  if xvalues.get(x) == None: 
    xvalues.update({x: values.pop()}) 
  else:
    values.pop()

In [214]: xvalues                                                                                                                                                                                 
Out[214]: {'x2': 'DEF', 'x1': 'GHI', 'x3': 'ABC'}

如果您可以将数据格式添加到您的问题中,我可以更新此答案,但我希望这会有所帮助

或者仅插入带有值的值,可以使用以下方法:

xinsert = [] 
xinsert2 = [] 
def makereduce(agg, rval): 
   if agg[1][rval]: 
     xinsert.append(rval) 
     xinsert2.append(rval) 
   return('',values)  

values={'x1': 'ABC', 'x2': 'DEF', 'x3': 'GHI', 'x4': None}    
reduce(makereduce, values, ('',values)) 

In [413]: xinsert                                                                                                                                                                                 
Out[413]: ['x1', 'x2', 'x3']