2011-01-10 137 views

回答

16

a[2:4]创建选定子列表的拷贝,并且该拷贝是通过a[2:4].reverse()反转。这不会更改原始列表。切片Python列表总是创建副本 - 您可以使用

b = a[:] 

复制整个列表。

+1

@伊斯梅尔:我不明白的可变性和切片造成的事实之间的连接副本。切片NumPy数组不会创建副本,并且它们也是可变的。这些是独立的设计决定。 – 2011-01-10 13:53:05

+0

@İsmail:我似乎没有明白你在做什么。如果Python列表是不可变的,那么您无法确定是否创建了副本,因为无论如何您都无法修改它。 – 2011-01-10 14:50:41

1

a [2:4]是使用列表a中的2,3,4项目构建的列表a的副本。前两项工作是因为您将更改分配到原始列表中的这些位置。最后一个不起作用,因为你不影响原始列表。

4

你可以考虑另一种方法是使用逆转片:

a[2:4] = a[3:1:-1] 
3

只需使用切片和扭转它。

a[2:4] = a[2:4][::-1] 
0

下面是使用切片和一点 列表基本面奇怪的例子,离奇的解决方案。

问题:在两个部分反向列表。

I/P: [1,2,3,4,5,6]

O/P: [3,2,1,6,5,4]

溶液:

[item for i in range(0,len(l),len(l)/2) for item in l[i:i+len(l)/2][::-1]] 

问题:反向某人名字的字母。

如哈利·波特

O/P:yrraH retroP

溶液:

' '.join(map(lambda x:x[::-1], s.split()))