题目:将一个列表向后平移,末尾的数字添加到头部。例如:list=[1,2,3,4,5,6,7,8,9,10],向后平移4格,变成[7,8,9,10,1,2,3,4,5,6]
1 # -*- coding:utf-8 -*-
2
3 l =[1,2,3,4,5,6,7,8,9,10]
4 print l
5 print '向后移动4格'
6 '''
7 l1=l
8 print id(l1)
9 print id(l)
10 for i in range(4,9):
11 l[i]=l1[i-4]
12 print l
13 for i in range(4):
14 l[i]=l1[i+6]
15 #print l
16 '''
17 l1 = [1,2,3,4,5,6,7,8,9,10,11]
18 #print id(l)
19 #print id(l1)
20 for i in range(4,10):
21 l[i] = l1[i-4]
22 #print l
23 for i in range(4):
24 l[i] = l1[i+6]
25 print l
运行的结果为:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 向后移动4格 140134087009128 140134086958688 [7, 8, 9, 10, 1, 2, 3, 4, 5, 6]
向后移动4格[7, 8, 9, 10, 1, 2, 3, 4, 5, 6]
看上面的程序你会发现真正执行的程序没几条,大部分都是注释,本题目的重点在于列表是可变的:
最原始的程序,我另l1=l来进行数据替换,发现就是不行,可以看for循环里的逻辑,没毛病,然后我把l和l1的id输出,发现,两个列表的id是一样的
列表是可变的,所以第一个for循环开始执行,l1也跟l一起变了。
所以要选择另外的列表l1来做数据提取
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
向后移动4格
140134087009128
140134086958688
[7, 8, 9, 10, 1, 2, 3, 4, 5, 6]