加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python列表控制增量

发布时间:2020-12-20 13:50:47 所属栏目:Python 来源:网络整理
导读:我正在尝试增加像算盘一样的 python数字列表. list = [0,0]units = 4def m(list,units): for e in range(len(list)): if units: list[e] = list[e] + 1 units -= 1 这段代码工作正常,如果我运行m(列表,单位)列表将是[1,1,1] – 我试图解决的问题是当单位值是
我正在尝试增加像算盘一样的 python数字列表.

list = [0,0]
units = 4

def m(list,units):
  for e in range(len(list)):
    if units:
      list[e] = list[e] + 1
      units -= 1

这段代码工作正常,如果我运行m(列表,单位)列表将是[1,1,1] – 我试图解决的问题是当单位值是单位= 2时list会增加到[2,2,1](这也很好)问题是当我从一个不均匀的列表中运行m()函数时,列表将从list [0]增加到最终[3,3,1]而不是[2,2].

是否有一种pythonic方式我可以让函数从最低值增加列表以实现均匀传播?

解决方法

为了从具有最小值的第一个元素开始,您可以将起始索引设置为starting_index = abacus.index(min(abacus)),如@jonrsharpe所示.

但是,您需要避免超出列表的末尾,例如,如果units = 4且starting_index = 3,那么您应该在除以len(abacus)之后取计算索引的剩余部分,即calculated_index%len(abacus) .

最后,我认为循环范围(单位)会更容易.这样你就不需要自己减少单位,并且可以同时处理比算盘长度更多的单位.

这是一个示例实现:

def m(abacus,units):
    starting_index = abacus.index(min(abacus))
    for raw_index in range(units):
        index = (raw_index + starting_index) % len(abacus)
        abacus[index] = abacus[index] + 1

并测试:

abacus = [0,0]    
print abacus
m(abacus,2)
print abacus
m(abacus,4)
print abacus
m(abacus,3)
print abacus
m(abacus,7)
print abacus

结果如下:

[0,0]
[1,0]
[2,1]
[3,2]
[3,3]
[5,5,4]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读