Python For Loop using List—尝试根据循环中使用的最后一个数字对数字对进行分组
从列表开始:Python For Loop using List—尝试根据循环中使用的最后一个数字对数字对进行分组,python,Python,从列表开始: l = [0,1,2,3,6,7,8,9] 试图产生: nl [[0, 1], [1, 2], [2, 3], [6, 7], [7, 8], [8, 9]] 使用for循环,我试图遍历列表,并使用前面的数字作为比较来创建一个集群组,重叠的组多次使用数字。它不起作用,我也不知道为什么。一旦到达6,它将停止添加到列表中 *编辑:是,仅分组数字序列对,1,2,3等,跳过3,6 测试代码: l = [0,1,2,3,6,7,8,9] nl = [] lastN = 0 for i
l = [0,1,2,3,6,7,8,9]
试图产生:
nl [[0, 1], [1, 2], [2, 3], [6, 7], [7, 8], [8, 9]]
使用for循环,我试图遍历列表,并使用前面的数字作为比较来创建一个集群组,重叠的组多次使用数字。它不起作用,我也不知道为什么。一旦到达6,它将停止添加到列表中 *编辑:是,仅分组数字序列对,1,2,3等,跳过3,6 测试代码:
l = [0,1,2,3,6,7,8,9]
nl = []
lastN = 0
for i in range(1,len(l)):
lastN = l[i - 1]
if i - lastN == 1:
nl.append([lastN, i])
print('nl',nl)
这导致:
nl [[0, 1], [1, 2], [2, 3], [3, 4]]
我的目标是:
nl [[0, 1], [1, 2], [2, 3], [6, 7], [7, 8], [8, 9]]
试试这个:
返回:
nl [[0, 1], [1, 2], [2, 3], [6, 7], [7, 8], [8, 9]]
这是一种简单的方法:
l = [0, 1, 2, 3, 6, 7, 8, 9]
nl = []
for i1, i2 in zip(l, l[1:]):
if i1 + 1 == i2:
nl.append((i1, i2))
print(nl)
# [(0, 1), (1, 2), (2, 3), (6, 7), (7, 8), (8, 9)]
尝试:
在比较和赋值中,您需要使用
l[i]
而不是i
,如下所示:
l = [0,1,2,3,6,7,8,9]
nl = []
for i in range(1, len(l)):
lastN = l[i - 1]
if l[i] - lastN == 1:
nl.append([lastN, l[i]])
print('nl',nl)
# nl [[0, 1], [1, 2], [2, 3], [6, 7], [7, 8], [8, 9]]
您的代码以前部分工作过,因为前几个条目的l[i]
与i
相同
如果您使用
l[i-1]
而不是lastN
或分配nextN=l[i]
然后使用l[i]
而不是l[i]
,代码的可读性会更高,更不容易出现错误。或者,您可以在中使用更简单的列表理解方法。但这可以识别代码中的特定错误。作为一个单行列表:
l = [0, 1, 2, 3, 6, 7, 8, 9]
nl = [[a, b] for a, b in zip(l, l[1:]) if b - a == 1]
或者扩展成for循环
nl = []
for a, b in zip(l, l[1:]):
if b - a == 1:
nl.append([a, b])
你的意思是要从结果中排除[3,6]吗?@PaulBrown是的,我很确定只有按顺序排列的数字对应该被打印“它不起作用,我也不知道为什么。一旦它到达6,它就停止添加到列表中。”-因为当I=5时,lastN=l[5-1]),这是索引为4的元素,索引为6。(列表索引从0开始)。因此“if语句”:5-6=-1,这是错误的。@PaulBrown-Yes,[3,6]被排除在外。(卢萨克)-让我困惑的是,为什么它在达到差距时才停止加入名单。我想它会跳过它,继续前进。谢谢你的解释。这里是python新手,使用变量。
l = [0, 1, 2, 3, 6, 7, 8, 9]
nl = [[a, b] for a, b in zip(l, l[1:]) if b - a == 1]
nl = []
for a, b in zip(l, l[1:]):
if b - a == 1:
nl.append([a, b])