公司里勤劳帅气却老是走神的小周同志又来了!
这次是这样的,比较两个规模比较大的List A和B, A中的元素e1前几个字符跟B中的元素e2前几个字符(形如thesamewords_______)匹配的话,输出e1到一新的List,同时对A和B进行更新(删除)。注意重复的情况。
思路很简单喽,两层for循环,匹配字符串前N位,if语句判断是否匹配,匹配的话加入新的list同时更新原来的List。简单写的代码如下,
l1 = ['aaaaaad', 'COFREP-B00000390-2015-05-SLCRXX-00-L-N--.zip', 'c', 'd']
l2 = ['aaaaaac', 'sada', 'dadada', 'da', 'di']
for e1 in l1:
for e2 in l2:
if e1[:6] == e2[:6]:
l1.remove(e1)
l2.remove(e2)
l3.append(e1)
print l1
print l2
print l3
结果很理想,如下,
['COFREP-B00000390-2015-05-SLCRXX-00-L-N--.zip', 'c', 'd']
['sada', 'dadada', 'da', 'di']
['aaaaaad']
[Finished in 0.1s]
小测试完毕,更新list数据源,重新运行,就报错啦,唯一有用的一行是,
ValueError: list.remove(x): x not in list
测试多组数据,还是没有解决,跟HR美女姐姐吃饭去了。重点是,吃完饭回来,短短几分钟就找到了bug所在,到底还是美女的力量大!
说说我是怎么测试找出来的吧——————控制变量法,小学就学过的,
保持l1不变,更改l2的数据。简例中匹配的是aaaaaa___,因此l2中的aaaaaac被删除了,l1中的aaaaaad也被删除了,l3中有了aaaaaad。当l2 = ['aaaaaac', 'aaaaaae', 'sada', 'dadada', 'da', 'di']时,即出现第二个aaaaaa___时,如上的错误再次出现了!兴奋!
用脚指头想象一下,l1[0]匹配到l2[0]的时候,分别对其执行remove(e1)和remove(e2)操作(l1[0]和l2[0]都被删除了),但是此时第二层loop还没有结束,又匹配到了l2[1](aaaaaae),此时会再次对l1执行操作remove(e1),一个完美的扑空!l1中已经没有删掉的e1了,因此报错。
To solve this bug, just one finger! may be five,
break
在if层末尾加上break结束语句就好啦!
一次多么絮絮叨叨又二逼的简单错误。
没有评论:
发表评论