美文网首页
【Python】for循环修改list的时候,会丢元素

【Python】for循环修改list的时候,会丢元素

作者: 失语失芯不失梦 | 来源:发表于2021-12-18 17:54 被阅读0次

    最开始是这样的,写了一段逻辑如下:

    all_to_handle_cards = self.icafe_obj.get_all_cards_data(last_monday_before, last_sunday)
    for card in all_to_handle_cards:
         db_data = self.db_obj.select(card['card_id'])
         if db_data is not None:
               all_to_handle_cards.remove(card
               print("卡片:%s 已提醒过建卡") % card['card_id']
    return all_to_handle_cards
    

    想要实现的功能就是:获取一个列表数据:all_to_handle_cards,遍历此列表,如果卡片已经在库里面有了,就把它从列表里删除。最后列表里只存储库里面没有的卡片数据

    但是我发现,处理的时候,最后的数据会漏处理几条,也就是说,比如:all_to_handle_cards=[1,2,3,4],然后数据库里面有[1,2],那按照我的想法最后列表剩下的数据应该是[3,4]。实际上,处理后剩下的是[2,3,4]

    然后百度了一番,找到了原因:用remove方法其实是移走了当前元素,所有后面的列表元素都会往前推进,这时候你移到下一个元素时已经跳过一个元素了

    解决方法就是:新建一个列表存储想要的数据
    修改之后的逻辑如下:

    all_to_handle_cards = self.icafe_obj.get_all_cards_data(last_monday_before, last_sunday)
    # 重新定义一个列表存储需要提醒建卡的卡片数据
    need_remind_cards = []
    for card in all_to_handle_cards:
         db_data = self.db_obj.select(card['card_id'])
         if db_data is None:
               need_remind_cards.append(card)
         else:
               print("卡片:%s 已提醒过建卡") % card['card_id']
    return need_remind_cards
    

    参考链接

    相关文章

      网友评论

          本文标题:【Python】for循环修改list的时候,会丢元素

          本文链接:https://www.haomeiwen.com/subject/rymgfrtx.html