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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值