列表切片 python
List slice python
我正在尝试对列表进行快速排序,并想就地进行。
我有以下代码并且想知道一般情况(这个问题经常出现在我身上,因为我试图解决实际列表中的列表问题而不是复杂的 returns 序列或使用奇怪的索引)列表切片是否允许我影响它的派生列表?做这样的事情会产生更大的后果吗?
def partition(A,l,r):
p=A[l]
i=l+1
print(A)
for j in range(l+1,r):
if A[j]<p:
save=A[i]
A[i]=A[j]
A[j]=save
i+=1
save=A[i-1]
A[i-1]=A[l]
A[l]=save
return i-1
def quickSort(A,n):
if n>1:
split=partition(A,0,n)
quickSort(A[:split],len(A[:split]))
quickSort(A[split+1:],len(A[split+1:]))
print(A)
return A
A=[3,4,5,2,10,7,6,9,1]
print(quickSort(A,len(A)))
numpy
lets you assign to slices in a way that is reflected in the original array (numpy
slices return views):
import numpy as np
a = np.array(range(10))
print(a) # [0 1 2 3 4 5 6 7 8 9]
b = a[3:7]
print(b) # [3 4 5 6]
b[0] = 33
print(b) # [33 4 5 6]
print(a) # [ 0 1 2 33 4 5 6 7 8 9]
python list
的一部分总是 returns 一个副本,因此您必须自己在列表上编写视图...
我正在尝试对列表进行快速排序,并想就地进行。
我有以下代码并且想知道一般情况(这个问题经常出现在我身上,因为我试图解决实际列表中的列表问题而不是复杂的 returns 序列或使用奇怪的索引)列表切片是否允许我影响它的派生列表?做这样的事情会产生更大的后果吗?
def partition(A,l,r):
p=A[l]
i=l+1
print(A)
for j in range(l+1,r):
if A[j]<p:
save=A[i]
A[i]=A[j]
A[j]=save
i+=1
save=A[i-1]
A[i-1]=A[l]
A[l]=save
return i-1
def quickSort(A,n):
if n>1:
split=partition(A,0,n)
quickSort(A[:split],len(A[:split]))
quickSort(A[split+1:],len(A[split+1:]))
print(A)
return A
A=[3,4,5,2,10,7,6,9,1]
print(quickSort(A,len(A)))
numpy
lets you assign to slices in a way that is reflected in the original array (numpy
slices return views):
import numpy as np
a = np.array(range(10))
print(a) # [0 1 2 3 4 5 6 7 8 9]
b = a[3:7]
print(b) # [3 4 5 6]
b[0] = 33
print(b) # [33 4 5 6]
print(a) # [ 0 1 2 33 4 5 6 7 8 9]
python list
的一部分总是 returns 一个副本,因此您必须自己在列表上编写视图...