Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python for在多个数组中循环,然后找到匹配项并执行某些操作_Python_Python 2.7_Loops_For Loop - Fatal编程技术网

python for在多个数组中循环,然后找到匹配项并执行某些操作

python for在多个数组中循环,然后找到匹配项并执行某些操作,python,python-2.7,loops,for-loop,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

我希望能在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],看看它们是否匹配,然后我想将它们写入我的文件,如果它们不匹配,我也想用不同的消息来写入

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

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

在一个数组中推送所有已“处理”的记录,在另一个数组中推送所有“无效”的记录,最后比较它们并删除所有已处理的记录,这样只剩下一条接近我需要的未处理记录

#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])
#而b
我很困惑为什么if语句正确,而else语句不正确。if语句返回所有匹配的记录(没有任何重复记录或额外记录)。else返回所有有效和无效的记录(外部for循环和内部for循环的数量)

对不起,我想我已经到了一个地步,我已经看了太久了,我甚至不再有逻辑思维了

我不想在这件事上耽误这么久。。。任何帮助都将不胜感激。我很抱歉,如果这是一个非常基本的问题,我只是在过去3天用python编码,这个项目需要在未来两天内完成,所以我反对时间

任何帮助或指导都将不胜感激


谢谢

正如评论中所建议的那样,我创建了一个集合,其中包含我所关心的元组中的项,然后通过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 

构建一个集合,以包含
arraysSortedByLargest
中项目元组中的所有第一个项目。然后循环检查每个元组中的第一项是否在集合中,以将其写入文件或执行其他操作。这解决了我的问题!!!非常感谢您为我指明了正确的方向,并对流程如此精确。