python for在多个数组中循环,然后找到匹配项并执行某些操作
我希望能在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
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
中项目元组中的所有第一个项目。然后循环检查每个元组中的第一项是否在集合中,以将其写入文件或执行其他操作。这解决了我的问题!!!非常感谢您为我指明了正确的方向,并对流程如此精确。