在增量列表中插入值不起作用
Insert value in Incremental List not working
上下文:
这段代码非常简单,我是 python 的新手。我有一个递增的数字列表,我需要做的就是检查是否有任何缺失值,如果有,则在该位置插入 -1,例如:
如果我有一个包含值 [1,2,4,5] 的列表,我希望它变成 [1,2,-1,4,5]。
如果我有一个包含值 [1,4,5] 的列表,我希望它变成 [1,-1,-1,4,5]。
简单,但我无法在 python 上正确完成。
我的代码:
id:我要修改的列表
i、j 和 z: 个计数器。
MyRange: 我无法显示变量的真实名称(我没有代码),但范围是正确的。
z=0
for i in MyRange:
value = id[i]
value2 = id[i+1]
j=z
//This while is here because I try not to compare a value with -1
//(I think this is the problem)
while value == -1:
j=j-1
value = id[j]
if(int(value)+1 == int(value2)):
if(value2 != -1):
id.insert(i,-1)
z=z+1
此代码识别任何缺失值,然后填充列表的其余部分(从缺失值到最后一个值为 -1 的值)。
如有任何帮助,我们将不胜感激。谢谢你,如果有任何英文错误,我们深表歉意。
一个比较简单的方法是制作一组数字。然后你可以从最小数到最大数,并寻找集合中的数字。如果它在那里,你们都很好。如果不存在,则生成 -1
.
def fill_range(initial_range, fill_vallue):
smallest = initial_range[0]
biggest = initial_range[-1]
items = set(initial_range)
for i in range(smallest, biggest+1): # use xrange on python2.x
if i in items:
yield i
else:
yield fill_value
您可以像这样使用此生成器函数:
print(list(fill_range([1,2,4,5], -1)))
如果您以前没有见过生成器函数,它们值得学习,但上面的答案可能有点令人困惑。这是一个累积列表然后 returns 最后的版本:
def fill_range(initial_range, fill_vallue):
result = []
smallest = initial_range[0]
biggest = initial_range[-1]
items = set(initial_range)
for i in range(smallest, biggest+1):
if i in items:
result.append(i)
else:
result.append(fill_value)
return result
您可能还会注意到 if
else
套件在这里可以很容易地替换为 conditional expression...
您只需要一个额外的变量来跟踪序列中缺失的元素。
def insert_minus_ones(lst):
new_lst = []
last = lst[0] - 1
for e in lst:
while (last + 1) != e:
new_lst.append(-1)
last += 1
new_lst.append(e)
last += 1
return new_lst
上面的代码适用于任何数字序列:
>>> insert_minus_ones([1,2,4,6,10])
[1, 2, -1, 4, -1, 6, -1, -1, -1, 10]
>>> insert_minus_ones([-5,-4,-3,2])
[-5, -4, -3, -1, -1, -1, -1, 2]
上下文:
这段代码非常简单,我是 python 的新手。我有一个递增的数字列表,我需要做的就是检查是否有任何缺失值,如果有,则在该位置插入 -1,例如:
如果我有一个包含值 [1,2,4,5] 的列表,我希望它变成 [1,2,-1,4,5]。
如果我有一个包含值 [1,4,5] 的列表,我希望它变成 [1,-1,-1,4,5]。
简单,但我无法在 python 上正确完成。
我的代码:
id:我要修改的列表
i、j 和 z: 个计数器。
MyRange: 我无法显示变量的真实名称(我没有代码),但范围是正确的。
z=0
for i in MyRange:
value = id[i]
value2 = id[i+1]
j=z
//This while is here because I try not to compare a value with -1
//(I think this is the problem)
while value == -1:
j=j-1
value = id[j]
if(int(value)+1 == int(value2)):
if(value2 != -1):
id.insert(i,-1)
z=z+1
此代码识别任何缺失值,然后填充列表的其余部分(从缺失值到最后一个值为 -1 的值)。
如有任何帮助,我们将不胜感激。谢谢你,如果有任何英文错误,我们深表歉意。
一个比较简单的方法是制作一组数字。然后你可以从最小数到最大数,并寻找集合中的数字。如果它在那里,你们都很好。如果不存在,则生成 -1
.
def fill_range(initial_range, fill_vallue):
smallest = initial_range[0]
biggest = initial_range[-1]
items = set(initial_range)
for i in range(smallest, biggest+1): # use xrange on python2.x
if i in items:
yield i
else:
yield fill_value
您可以像这样使用此生成器函数:
print(list(fill_range([1,2,4,5], -1)))
如果您以前没有见过生成器函数,它们值得学习,但上面的答案可能有点令人困惑。这是一个累积列表然后 returns 最后的版本:
def fill_range(initial_range, fill_vallue):
result = []
smallest = initial_range[0]
biggest = initial_range[-1]
items = set(initial_range)
for i in range(smallest, biggest+1):
if i in items:
result.append(i)
else:
result.append(fill_value)
return result
您可能还会注意到 if
else
套件在这里可以很容易地替换为 conditional expression...
您只需要一个额外的变量来跟踪序列中缺失的元素。
def insert_minus_ones(lst):
new_lst = []
last = lst[0] - 1
for e in lst:
while (last + 1) != e:
new_lst.append(-1)
last += 1
new_lst.append(e)
last += 1
return new_lst
上面的代码适用于任何数字序列:
>>> insert_minus_ones([1,2,4,6,10])
[1, 2, -1, 4, -1, 6, -1, -1, -1, 10]
>>> insert_minus_ones([-5,-4,-3,2])
[-5, -4, -3, -1, -1, -1, -1, 2]