到三清除列表数值的问题(python)

问题如下:

假如有如此一个列表【0,1,2,3,4,5】

从下标为0开始,每次统计到三,并把改数值从列表中清除。第一轮清除2,若达到列表的右边界,则重新从列表头部开始。直至列表中仅剩余一个元素。

解题思路:

该问题难点主要在如何在超出边界让下标重新从开头算起和每次走后所记忆的下标和更新集合的长度

程序代码:

data = input()
lis = list(data)
i = 3
q = 3
while len(lis) > 1:
    if i > len(lis):
        while i > len(lis):
            i = i - len(lis)
        lis.remove(lis[i-1])
    else:
        if q > 0:
            lis.remove(lis[i-1])
            q -= 1
            i += q
        else:
            q = 3
            i += q
            lis.remove(lis[i - 1])
print(lis)

代码首轮

i == 3

q == 3

此轮

i==5

q == 2

次轮只让i + 2 因为首轮删除了一个元素。所以第二轮的下标是4,即第五个元素。

以此类推。

关于边界问题,我发现有一规律,那就是让i值减去列表长度,只到i小于列表长度,即可从新在寻找此时的i个元素。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值