python for循环遍历多个数组然后找到匹配并做一些事情

时间:2018-04-04 04:36:45

标签: python python-2.7 loops for-loop

我希望我能得到一些关于python for循环的指导和帮助。我有以下

我的数组看起来像这样:

 arraysSortedByLargest = [('AWUF250816','AC','AMF01',192),
 ('CAPF3030B6', 'DB','ACL02',265),('CAPF3636A6','DB','ACL02',116)]



 arraysSortedByLargest2 = [('AWUF250816','AC',192),
     ('CAPF3030B6', 'DB',265)]



 #this is what I have done 



for largest1 in arraysSortedByLargest:

            for largest2 in arraysSortedByLargest2:

                if (largest1[0]==largest2[0] ):
                    #extend already used values to use later
                    modelsWithNoDJPMO.extend((largest1[0] , largest1[1]))
                    column = 1 
                    ws2.cell(row=row, column=column, value=largest1[0])
                    column += 1
                    ws2.cell(row=row, column=column, value=largest1[1])
                    column += 1
                    ws2.cell(row=row, column=column, value='0%')
                    row += 1 
                else:
                    # print 'here 2' + largest1[0] 
                    #do the same as if statement only change the last cell row value from '0%' to 'no value available'
                    #extend all the invalid values to use later in comparison
                    modelsWithNoOpportunities.extend((largest1[0] , largest1[1]))

我想要做的就是遍历两者并比较元组[0]以查看它们是否匹配然后我想将它写入我的文件,如果他们不想我只想用不同的消息写它。

我一整天都在苦苦挣扎...我只是想不出来......我认为它应该像两个for循环那样简单比较和else语句但是else给了我所有的迭代所以我得到了每一个无效的测试,而不是只有1。

然后我决定尝试以下方法:

推送所有已经处理好的#34;记录在一个数组中,所有"无效"记录在另一个中,最后比较它们并删除所有已处理的记录,这使我只留下一条接近我需要的未处理记录。

#print modelsWithNoOpportunities
            noOpp = list(set(modelsWithNoOpportunities) - set(modelsWithNoDJPMO))   

` 事情是......我认为必须有更好,更容易,更有效的方法来做到这一点......

我一直在阅读一些不同的东西和方法,但我只是不明白..这里有一些我尝试过的东西:

        # while b < len( arraysSortedByLargest1):
        #     print largest1[0]
        #     # if arraysSortedByLargest[i][0]== arraysSortedByLargest1[b][0] ):  
        #     #     #print ' here if ' + ( arraysSortedByLargest1[b][0])
        #     # else:
        #         #print ' here else ' + ( arraysSortedByLargest1[b][0])
        #     b += 1
        # i += 1


        # for largest1, largest2  in zip arraysSortedByLargest,  arraysSortedByLargest1):
        #     print(largest1, largest2) 

        # for i, largest1 in enumerate arraysSortedByLargest):
        #     for largest2 in  arraysSortedByLargest1:   
        #         print  arraysSortedByLargest[i]
        #         print  arraysSortedByLargest1[i]

        # for largest1 in  arraysSortedByLargest:        
        #     modelsWithNoOpportunities=[];      
        #     for largest2 in  arraysSortedByLargest1:               
        #         #opportunity and production models match and DJPMO 0
        #         if(largest1[0]==largest2[0] and largest1[1]==largest2[1]):  
        #             modelsWithNoDJPMO.append(largest2[0] + ' ' + largest2[1])  
        #         else:
        #            modelsWithNoOpportunities.append(largest2[0]  + ' ' + largest2[1])

我很困惑为什么if语句正常工作而其他方面没有。 if语句返回所有匹配的记录(没有任何重复或额外的记录)。 else返回所有有效和无效的记录(对于外部和内部for循环的数量)。

对不起,我想我已经到了一个地方,我一直在看这个问题太久了,我甚至不再考虑逻辑了。

我不想再失去这么长时间了解......任何帮助都将不胜感激。我很抱歉,如果这是一个非常基本的问题,我过去3天只在python中编码,这个项目需要在接下来的两天内完成,所以我反对时间。

非常感谢任何帮助或指导!!

谢谢!

1 个答案:

答案 0 :(得分:0)

正如我在评论中所建议的那样,我创建了一个包含我关注的元组中的项目的集合,然后通过arraysortedbylargest2循环并进行比较,见下文:

            s = set()

            for i in range(len(arraysSortedByLargest)):
                s.add(arraysSortedByLargest[i][0])

            for largest2 in arraysSortedByLargest2:
                if largest2[0] in s:
                    print 'here in if ' + largest2[0]
                    column = 1 
                    ws2.cell(row=row, column=column, value=largest2[0])
                    column += 1
                    ws2.cell(row=row, column=column, value=largest2[1])
                    column += 1
                    ws2.cell(row=row, column=column, value='0%')
                    row += 1 
                else:
                    print  'here in else ' +largest2[0]
                    column = 1 
                    ws2.cell(row=row, column=column, value=largest2[0])
                    column += 1
                    ws2.cell(row=row, column=column, value=largest2[1])
                    column += 1
                    ws2.cell(row=row, column=column, value='No opportunity data available')
                    row += 1