你可以向我解释一下,我完全迷失在这里。
这是我的代码:
def ff(L):
for a in L:
k = L.index(a)
print(k)
b = L.pop(k)
g = b
print(g)
L.insert(k,g)
return L
这是输出:
>>> L = [12,13,14]
>>> ff(L)
0
12
1
13
2
14
[12, 13, 14]
但是当我这样做时:
def ff(L):
for a in L:
k = L.index(a)
print(k)
b = L.pop(k)
g = b + 1
print(g)
L.insert(k,g)
return L
输出:
>>> L = [12,13,14]
>>> ff(L)
0
13
0
14
0
15
[15, 13, 14]
为什么这样?
答案 0 :(得分:5)
很明显。您可以在代码中添加更多打印件,以便自己查看原因:
>>> def ff(L):
... for a in L:
... k = L.index(a)
... print 'value', a, 'at', k, 'pos in', L,
... b = L.pop(k)
... g = b + 1
... print 'list after pop', L,
... L.insert(k,g)
... print 'inserted value', g, 'list after ins', L
... return L
...
>>> ff(L)
value 12 at 0 pos in [12, 13, 14] list after pop [13, 14] inserted value 13 list after ins [13, 13, 14]
value 13 at 0 pos in [13, 13, 14] list after pop [13, 14] inserted value 14 list after ins [14, 13, 14]
value 14 at 0 pos in [14, 13, 14] list after pop [13, 14] inserted value 15 list after ins [15, 13, 14]
[15, 13, 14]
所以你基本上寻找一个值,弹出它,在第一个位置插入值+ 1,寻找值+ 1并且进一步。
答案 1 :(得分:3)
我不确定这里的问题是什么,但是当您在第一次迭代中递增值时,第0次索引处的项目变为13.并且在第二次迭代期间L.index(13)
再次返回索引0,因此在第二次迭代中迭代你再次将索引0处的项目修改为14.然后继续......
def ff(L):
for a in L:
print 'List', L, 'searching for', a, 'found at', L.index(a)
k = L.index(a)
b = L.pop(k)
g = b + 1
L.insert(k,g)
return L
L = [12,13,14]
print ff(L)
<强>输出:强>
List [12, 13, 14] searching for 12 found at 0
List [13, 13, 14] searching for 13 found at 0
List [14, 13, 14] searching for 14 found at 0
[15, 13, 14]
因此,list.index()
总是返回找到的第一个匹配的索引,这就是为什么在第二种情况下第0个索引处的项目会增加。
将所有值增加1的简单解决方案是:
>>> L = [12,13,14]
>>> [x+1 for x in L]
[13, 14, 15]