Python:在遍历列表时编辑列表

时间:2018-08-01 12:44:13

标签: python iterator

Stack上有一些相关的问题,但我想尽可能清楚。我正在使用Python 3

如果我有一个列表$('a').attr('href', 'your new url'),并且使用以下代码:

N

我得到一个N = [1,2,3,4,6,7,8] for x in N: N[x] = N[x] * -1 return N 。我知道您不应该在遍历列表时添加和删除元素,但是我想清楚地定义为什么上面的示例不起作用,对我来说似乎应该没有问题。在第一次迭代中,Index out of range error的评估结果应为x。因此,如果我想编辑1,我不明白为什么我无法编辑。

请注意,N[1]是执行此操作的正确方法。

7 个答案:

答案 0 :(得分:2)

使用enumerate

例如:

N = [1,2,3,4,6,7,8]
for x, value in enumerate(N):
    N[x] = value * -1
print(N)

或列表理解。

例如:

N = [x * -1 for x in N]

答案 1 :(得分:1)

for x in N:中,x接受N中的每个,然后将其用作索引。 Python中的列表是0索引的,因此到达列表末尾并尝试访问N[8](不存在)时,您会得到一个索引超出范围错误。您可以改用for x in range(len(N)):

答案 2 :(得分:0)

这里的问题实际上有点不同:您对待列表的成员就像他们是列表的 indices 一样。由于N[8]不存在,因此这就是您的错误出处。我认为您的意思是:

N = [1,2,3,4,6,7,8]
for x in range(len(N)):
    N[x] = N[x] * -1
return N

答案 3 :(得分:0)

您用错误的方式枚举

N = [1,2,3,4,6,7,8]
for i, x in enumerate(N):
    N[i] = N[i] * -1
return N

答案 4 :(得分:0)

在第一次迭代中,<input type="number" class="form-control" style="margin:5px;width:100px;text-align:center;display:inline-block;text-align:center" ng-model="matrix[m]"> 等于x=1,因此您的新N[1]变为2 = N[1]。现在,由于您正在使用2 * -1,因此-2x时,您的代码将尝试访问8,但是由于for x in N的长度为N[8],索引从N开始,一直上升到8。因此,没有索引0,因此会出现错误7

答案 5 :(得分:0)

使用好的lambda 或列表理解中的特定可调用项:

lambda:

N = [1,2,3,4,6,7,8]
M = [(lambda x:-x)(element) for element in N]
print(M)

可调用/功能:

def negate(x):
    return -x

N = [1,2,3,4,6,7,8]
M = [negate(element) for element in N]
print(M)

答案 6 :(得分:0)

在您的代码中-

$jobdesc = '<p> Hello test</p><p><br data-mce-bogus="1"></p><p> Hello test</p><p><br data-mce-bogus="1"></p><p> Hello test</p><p><br data-mce-bogus="1"></p><p> Hello test</p><p><br data-mce-bogus="1"></p><p> Hello test</p><p><br data-mce-bogus="1"></p><p> Hello test</p>';
$jobdesc = $jobdesc.replace('/<p><br data-mce-bogus="1"></p>/g', '');

访问方式是-

N = [1,2,3,4,6,7,8]
for x in N: 
# x will be 1, 2, 3, 4

但是索引从0到n-1,其中n-1是最后一个元素。同样,在您的列表中,您缺少N[x] ,因此索引将发生严重变化。如果您有

5

您的代码可以正常工作。但是由于并非如此,因此您必须像-

一样使用N = [1,2,3,4,5,6,7,8]
range