【问题标题】:Can't figure out how to increment certain values in a list无法弄清楚如何增加列表中的某些值
【发布时间】:2013-07-08 23:31:18
【问题描述】:

所以我和我的伙伴正在互相帮助学习编程,我们一直在为自己提出挑战。他想出了一个有 20 个开关的方案。我们需要编写一个程序,首先点击每隔一个开关,然后每隔三个开关,然后每隔四个开关,并让它输出打开和关闭。

我对如何继续有基本的想法,但是我不完全确定如何从列表中挑选出每个其他/第 3/第 4 个值。我想一旦我弄清楚了那一小部分,剩下的应该很容易。

这是列表:

start_list = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

我知道我可以通过以下方式选择每个元素:

start_list[2]

但是,我如何选择每个其他元素,然后将其递增 1?

【问题讨论】:

标签: python list increment


【解决方案1】:

使用Python's List Slicing Notation:

start_list[::2]

切片为[start:stop:step][::2] 表示,从头到尾,获取每隔一个元素。这将返回每隔一个元素。

我相信您可以弄清楚如何获取每第三和第四个值:p。


要更改每个的值,您可以这样做:

>>> start_list[::2] = len(start_list[::2])*[1]
>>> start_list
[1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0]

【讨论】:

  • 好的,所以我把那部分记下来了,但我现在不知道如何将每个数字加 1。
  • 太棒了!这样可行!只需要分析它,以便我了解那里发生了什么。另外,再问一个问题,我应该很高兴。是否可以从第二个数字开始?所以它是 0,1...
  • @Spurnout 是的!只需执行start_list[1::2]。切片之美!
  • 我们赢了!谢谢海德罗!
【解决方案2】:

每隔一个开关:

mylist[::2]

每三分之一:

mylist[::3]

你也可以分配给它:

mylist=[1,2,3,4]
mylist[::2]=[7,8]

【讨论】:

  • start_list[::2]=[1]*((len(start_list)+1)/2) - 分配给切片时需要提供正确长度的列表。跨度>
  • 感谢 Tiago,我在运行时得到了这个输出。 TypeError:不能将序列乘以“float”类型的非整数
  • 对不起,我仍在使用 python 2。在 python 3 中,int 除法得到一个浮点结果。您应该将 '/' 运算符替换为 '//
【解决方案3】:
>>> start_list = [0] * 20
>>> for i in range(2, len(start_list)):
...     start_list[::i] = [1-x for x in start_list[::i]]
... 
>>> start_list
[0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 2014-12-18
    • 2013-11-05
    • 2011-10-30
    • 1970-01-01
    • 2019-07-01
    • 2013-05-19
    相关资源
    最近更新 更多