Нужна помощь в выяснении цикла, чтобы сократить длину кода - PullRequest
1 голос
/ 07 ноября 2019

Я использую модель линейной регрессии в 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 ]

1 голос
/ 07 ноября 2019

Предполагая, что 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'.

0 голосов
/ 07 ноября 2019

В зависимости от настроек вы можете сделать что-то вроде этого:

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...