我试图将连续数字的每个连续段分隔在不同的数组中。 例如,
# Input
x=[1,2,3,4,5,8,11,12,13,18]
# Output:
x=[[1,2,3,4,5],[8],[11,12,13],[18]]
现有代码
x=[1,2,3,4,5,8,11,12,13,18]
temp=[]
firstnumber=0
for i in range(1,len(x)-1,1):
current=x[i]
previous=x[i-1]
if ((current-previous)!=1):
mm=(x[firstnumber:i-1])
temp.append(mm)
firstnumber=x[i]
print(temp)
我只得到[[1,2,3,4],[]]的结果,我不知道为什么。
答案 0 :(得分:1)
我试图回答这个问题,并尽可能减少您的代码。
x=[1,2,3,4,5,8,11,12,13,18]
temp=[]
firstnumber=0
first_index = 0
for i in range(1, len(x)):
current=x[i]
previous=x[i-1]
if ((current-previous)!=1):
mm = x[first_index:i]
temp.append(mm)
firstnumber = x[i]
first_index = i
temp.append(x[first_index:])
print(temp) # [[1, 2, 3, 4, 5], [8], [11, 12, 13], [18]]
我更改了什么:
firstnumber
被用作索引,但实际上是列表的元素,因此我们需要使用first_index = i
,即该迭代中的当前索引。
循环未涵盖列表的所有元素,我们需要一直进行到列表的末尾,因此我们遍历range(1, len(x)
最后,即使循环完成,除非我们在循环之后添加它,否则它将丢失最后一个序列,因此添加了temp.append(x[first_index:])
注意:此方法将对您拥有的输入起作用,但并非在所有情况下都可靠,也不是执行此操作的最有效方法,但是,您的问题是为什么它不起作用,因此希望如此回答
答案 1 :(得分:1)
我的回答不是要提供已修复的代码,而是要执行描述的任务。
请注意,您可能使用-1
索引,表示最后一个元素。我会按照以下方式做
x=[1,2,3,4,5,8,11,12,13,18]
temp=[x[:1]]
for i in x[1:]:
if temp[-1][-1]+1!=i: temp.append([])
temp[-1].append(i)
print(temp)
输出:
[[1, 2, 3, 4, 5], [8], [11, 12, 13], [18]]
说明:我首先将第一个元素加载为一个元素列表,然后对于后续元素,如果当前元素和最后看到的元素之间的差异不是1,则将新的空列表附加到temp,然后独立于完全填充是否有条件我将当前元素添加到最后一个子列表中。
答案 2 :(得分:0)
x=[1,2,3,4,5,8,11,12,13,18]
x.append(x[-1]-2)
temp=[]
firstnumber=0
for i in range(1, len(x)):
current=x[i]
previous=x[i-1]
if ((current-previous)!=1):
mm=(x[firstnumber:i])
temp.append(mm)
firstnumber=i
print(temp)
答案 3 :(得分:-1)
我相信在代码中,变量firstnumber
应该包含连续数字的任何连续段的第一个元素的索引。
但是,当您firstnumber=x[i]
执行此操作时,该目的会丢失。相反,您可以执行firstnumber = i
,然后它将起作用。
此外,此实现将不会追加最后的连续段。结果,您将不得不在循环之外执行该操作。