如果不是的话,老老实实
地从前到后的匹配字符串好了。
字符串匹配算法和检索方向
是相关的,一般的算法设计都是考.
小编今天从项目引入这个天大的坑!!!由于工作的需要,小编需要将旧表的数据迁移至新表,由于项目的需求要动态的创建表并迁移数据(表格用项目编号来区分,在模型类里面封装了创建表格的静态方法), 这个静态方法其实就是拼接sql语句。由于表格达到2000+,所以只好上线之前就迁移好数据和表格,小编花了将近一周的时间终于初见成效,但是其中有一块耗费了小编一天的时间,那就是在数据迁移的时候,遇到了不同的旧表的重复数据的迁移。我需要去掉重复的数据,所以也就有了双层的列表的遍历,删除相同数据的CNM天坑!也就是漏掉了数据,写这个经历不是为了什么,只是把自己的经验记下来,都是自己的宝贵财富。下面给大家介绍这个天坑:
look the demo:
lists = [1,2,3,4,5,6]
for list in lists:
lists.remove(list)
print(lists)
返回:[2, 4, 6]
解析:
1-问题:循环lists,想删除lists的所有元素,但实际确有数据保留了下来,
2-原因:这是因为在循环lists,并删除lists的元素时,列表的位置发生了移位,当删除“1”后,第二个元素“2”补位,这样“2”就躲过了被删除的命运,轮到“3”了,“3”被删除之后,“4”来补位,逃过一劫,以此类推!!
3-拓展:
(1)for循环是先判断对象是否为可迭代对象,不是的话直接报错,抛出TypeError异常,是的话,调用 __iter__或iter方法,返回一个迭代器
(2)不断地调用迭代器的__next__或next方法,每次按序返回迭代器中的一个值
(3)迭代到最后,没有更多元素了,就抛出异常 StopIteration,这个异常 python 自己会处理,不会暴露给开发者
4-所以在循环list时,不能循环的同时删除自身元素,而是要利用pop(下标)的删除。
不知道你是不是这个意思,
字典调用values()方法会返回Value值所构成的列表,通过两个循环就能遍历字典里的列表
data = {'a':[1,2,3],'b':[4,5,6]}for l in data.values():
for item in l:
print item