Python для цикла, если вопрос оператора - PullRequest
0 голосов
/ 01 мая 2018

Когда мы запускаем следующий цикл foor, он выводит одну и ту же пару раз (см. Далее ниже), хотя keepPairs содержит только различные кортежи. У кого-нибудь есть быстрое решение?

processedPairs = []
bestCorrPairs = []
corrCoefs = []
for pair in keptPairs:
    if pair not in processedPairs:
        processedPairs.append(pair)
        bestCorrCoef = 0
        targetx = pair[0]
        t_y = []
        for p in keptPairs:
            if targetx in p:
                if (p[0]!=targetx): t_y.append(p[0])
                else: t_y.append(p[1])
            else: continue
        for targety in t_y:
            corr = calcCorr(final_t,targetx, targety)
            if (np.abs(corr) > np.abs(bestCorrCoef) and not (corr==0 or corr==1)):
                bestCorrCoef = corr
                bestPair = tuple([targetx, targety])
            else: continue

        bestCorrPairs.append(bestPair)
        corrCoefs.append(bestCorrCoef)
    else: continue

for i in range(0,len(bestCorrPairs)):
    print(bestCorrPairs[i], ': ', corrCoefs[i])

из:

('9.4', '15.4') :  0.9906385237419475
('9.4', '15.4') :  0.9906385237419475
('9.4', '15.4') :  0.9906385237419475
('9.4', '15.4') :  0.9906385237419475
('9.4', '15.4') :  0.9906385237419475
('9.4', '15.4') :  0.9906385237419475
('9.4', '15.4') :  0.9906385237419475
('3.1', '15.1') :  -0.9815967899407816
('3.1', '15.1') :  -0.9815967899407816
('17.8', '6.2') :  -0.9982604771744984
('6.2', '17.8') :  -0.9982604771744984
('10.c', '7.2') :  -0.8082515774139288
('17.3', '15.1') :  0.9810874111013809
etc.

Мы хотели бы обработать каждую пару только один раз. Печать пар после первого цикла for фактически печатает их только один раз, однако на выходе получается, что эти пары были обработаны несколько раз. Спасибо!

1 Ответ

0 голосов
/ 01 мая 2018

Я думаю, это потому, что вы не сбрасываете две переменные, которые добавляете (bestPair, bestCorrCoef) ... попробуйте сбросить две переменные при запуске цикла for или вы можете сделать это следующим образом:

for targety in t_y:
        corr = calcCorr(final_t,targetx, targety)
        if (np.abs(corr) > np.abs(bestCorrCoef) and not (corr==0 or corr==1)):
            bestCorrCoef = corr
            bestPair = tuple([targetx, targety])

            bestCorrPairs.append(bestPair)
            corrCoefs.append(bestCorrCoef)
        else: continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...