2011-01-10 73 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()))