都是血淋淋的经验啊!(Python)

来源:互联网 发布:苹果6怎么开4g网络 编辑:程序博客网 时间:2024/05/16 12:19

20160105

实时改变的变量:最好单独分配一个方法,将其当做参数传入——变化即使用参数;

*一定要注意那些实时变化的东西!可能会带来隐患

eg:

    def sortNew(self,bugdetailist):        sorted = []        for i in range(len(bugdetailist)):            if bugdetailist[i][4] == 'new':                sorted.append(bugdetailist[i])                bugdetailist.pop(i)        bugdetailist = sorted + bugdetailist        return bugdetailist

当调用这个方法的时候,会报错:IndexError: list index out of range,很容易发现每一次循环的时候(满足了 if )bugdetailist 会消除掉一个元素,然而似乎

for i in range(len(bugdetailist)):
中的 len(bugdetailist) 并不会发生变化依然执着的保持 “原bugdetailist” 的长度,但实际的列表已经缩小了,所以超出了长度。

那么解决方案就是——

    def sortNew(self,bugdetailist):        sorted = []        for i in range(len(bugdetailist)):            newindex = self.findNew(bugdetailist)            sorted.append(bugdetailist[newindex])            bugdetailist.pop(newindex)        bugdetailist = sorted + bugdetailist        return bugdetailist    def findNew(self,bugdetailist):        i = 0        for i in range(len(bugdetailist)):            if bugdetailist[i][4] == 'new':                return i        return i #notice there must return one value
将变化的每次循环都会列表当做参数,单独使用一个方法来处理,一对一(一个变化一个方法)。

尽管 i 还是越界了,但是越界的 i 却没有被使用了。

将变化的每次循环都会列表当做参数,单独使用一个方法来处理,一对一(一个变化一个方法)这样每一次的变化都有单独对应方法解决就会好得多。
0 0
原创粉丝点击