我正在制作一个可以固定列表顺序的程序,该顺序后跟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的顺序。
答案 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])
希望可以为您提供帮助。