我希望我能得到一些关于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中编码,这个项目需要在接下来的两天内完成,所以我反对时间。
非常感谢任何帮助或指导!!
谢谢!
答案 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