如何在使用Python 3的过程中更改数组中的元素?

时间:2018-06-20 10:02:31

标签: python python-3.x list

我正在制作一个可以固定列表顺序的程序,该顺序后跟2的差异。在此程序中,如果差异小于2,则需要替换/更改某个数字。好吧,我已经完成了大部分内容,但是问题是我无法正确替换它,并且由于无法在此过程中更改数字,因此我的输出也出错了。

list_1 = [1,2,5]
for i in range(1, len(list_1)):
    htl = list_1[i]-list_1[i-1]
    if not htl == 2:
       list_1[i-1] += 2
       print(list_1[i-1])

输出为:

3
4

但这是错误的,正确的输出是:

3

因为我只需要将数字2更改为3即可使其成为正确的顺序。

我在代码中所做的是,我向后减去以发现差异。如果存在差异,我尝试在要减去的数字上加上2,然后更改要减去的数字。但是在我的程序中,替换时遇到问题。例如(减法从索引1-索引0开始,索引2-索引1继续执行):2-1 = 1,所以它并没有清楚地遵循顺序,因此我尝试将'list_1'中的2替换为3(通过在要减去索引1的数字上加上2)。我无法替换该数字,并且由于无法替换该数字,因此下一个输出不应存在,因为只需要进行一次更改即可。

我的方法可能真的很复杂,但是这是我能想到的最好的方法,如果有更快的方法,我将非常感谢您的帮助。但是否则我想修复我的代码,一般的想法是遵循2的顺序。

4 个答案:

答案 0 :(得分:2)

归因错误:

list_1 = [1,2,5]

for i in range(1, len(list_1)):
    htl = list_1[i]-list_1[i-1]
    if htl != 2:
       list_1[i] = list_1[i-1] + 2

print (list_1)

输出:

[1, 3, 5]

但是最后,您想要的只是从起始点开始的序列,步长为2,步长为一定数量

start = 1
points = 3
stop = points * 2 + start
list_1 = list(range(start, stop, 2))

输出:

Out[11]: [1, 3, 5]

答案 1 :(得分:0)

如果我理解您的解释,您希望转换

list_1 = [1,2,5]list_1 = [1,3,5]

未得到期望结果的行是:

list_1[i-1] += 2

第一次for循环迭代时,它将生成list_1 = [3,2,5]

第二次迭代,它生成list_1 = [3,4,5]

更改行:

list_1[i-1] += 2

收件人:

list_1[i] = list_1[i-1] + 2

更新:

您说,如果差异小于2,则希望进行更改。

请考虑将if not htl ==2:条件更改为if htl < 2。然后,您将遇到两个相等的连续元素的情况。读起来也更好。

更新2:

为了捕获列表中只有零个或一个元素的错误,建议您在循环之前放置一个条件。 if len(list_1) > 1:是一个很好的起点,否则索引将引发IndexError。

答案 2 :(得分:0)

小于2? 我还认为您正在更改-1列表值,而不是当前索引。

这应该起作用吗?

list_1 = [1,2,5,6,7,8,15]
for i in range(1, len(list_1)):
    htl = list_1[i]-list_1[i-1]
    if htl < 2:
       list_1[i] =list_1[i-1]+2
       print(list_1[i-1])
print(list_1)

答案 3 :(得分:-1)

我不确定是否完全了解您想做什么,但首先要解决输出问题的更改:

  

list_1 [i-1] + = 2

作者

  

list_1 [i-1] + = 2

然后将您的照片放在之外:

for i in range(1, len(list_1)):
    htl = list_1[i]-list_1[i-1]
    if not htl == 2:


   list_1[i-1] += 1
   print(list_1[i-1])
print(list_1[i-1])

希望可以为您提供帮助。