爲什麼不能正常工作?如何反轉Python中列表的一部分(切片)?
# to reverse a part of the string in place
a = [1,2,3,4,5]
a[2:4] = reversed(a[2:4]) # This works!
a[2:4] = [0,0] # This works too.
a[2:4].reverse() # But this doesn't work
爲什麼不能正常工作?如何反轉Python中列表的一部分(切片)?
# to reverse a part of the string in place
a = [1,2,3,4,5]
a[2:4] = reversed(a[2:4]) # This works!
a[2:4] = [0,0] # This works too.
a[2:4].reverse() # But this doesn't work
a[2:4]
創建選定子列表的拷貝,並且該拷貝是通過a[2:4].reverse()
反轉。這不會更改原始列表。切片Python列表總是創建副本 - 您可以使用
b = a[:]
複製整個列表。
a [2:4]是使用列表a中的2,3,4項目構建的列表a的副本。前兩項工作是因爲您將更改分配到原始列表中的這些位置。最後一個不起作用,因爲你不影響原始列表。
你可以考慮另一種方法是使用逆轉片:
a[2:4] = a[3:1:-1]
只需使用切片和扭轉它。
a[2:4] = a[2:4][::-1]
下面是使用切片和一點 列表基本面奇怪的例子,離奇的解決方案。
問題:在兩個部分反向列表。
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()))
@伊斯梅爾:我不明白的可變性和切片造成的事實之間的連接副本。切片NumPy數組不會創建副本,並且它們也是可變的。這些是獨立的設計決定。 – 2011-01-10 13:53:05
@İsmail:我似乎沒有明白你在做什麼。如果Python列表是不可變的,那麼您無法確定是否創建了副本,因爲無論如何您都無法修改它。 – 2011-01-10 14:50:41