Đã tạo: tháng 12 đến 15 tháng 12 năm 2021 Bài viết này sẽ giải thích cách thay đổi hoặc xoay một mảng theo hướng trái hoặc bên phải trong Python. Xoay một mảng có nghĩa là chúng ta di chuyển hoặc chuyển từng giá trị của mảng về phía bên trái hoặc bên phải bằng các vị trí
9def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
0[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
1. Và các phần tử bên phải hoặc bên trái di chuyển sang đầu kia của mảng.[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
Chúng ta có thể thay đổi hoặc xoay một mảng trong Python bằng các phương pháp khác nhau được giải thích dưới đây.
Mảng dịch chuyển trong Python bằng mô -đun def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
9
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
Shift mảng trong Python bằng phương pháp
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
0Shift mảng trong python bằng cách sử dụng cắt mảng
from collections import deque
myarray = deque[[1, 2, 3, 4, 5, 6]]
myarray.rotate[2] #rotate right
print[list[myarray]]
myarray.rotate[-3] #rotate left
print[list[myarray]]
Output:
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
Shift mảng trong Python bằng phương pháp [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
0
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
Shift mảng trong python bằng cách sử dụng cắt mảng
Bài viết này sẽ giải thích cách thay đổi hoặc xoay một mảng theo hướng trái hoặc bên phải trong Python. Xoay một mảng có nghĩa là chúng ta di chuyển hoặc chuyển từng giá trị của mảng về phía bên trái hoặc bên phải bằng các vị trí
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
1. Và các phần tử bên phải hoặc bên trái di chuyển sang đầu kia của mảng.import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
Output:
[5 6 1 2 3 4]
[3 4 5 6 1 2]
Shift mảng trong python bằng cách sử dụng cắt mảng
Bài viết này sẽ giải thích cách thay đổi hoặc xoay một mảng theo hướng trái hoặc bên phải trong Python. Xoay một mảng có nghĩa là chúng ta di chuyển hoặc chuyển từng giá trị của mảng về phía bên trái hoặc bên phải bằng các vị trí
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
1. Và các phần tử bên phải hoặc bên trái di chuyển sang đầu kia của mảng.Chúng ta có thể thay đổi hoặc xoay một mảng trong Python bằng các phương pháp khác nhau được giải thích dưới đây.
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
Output:
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
Chúng ta có thể sử dụng phương pháp [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
3 của mô -đun def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
9 để xoay một mảng trong Python. Phương pháp [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
3 xoay đối tượng lớp [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
6 [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
1 vị trí, trong đó dấu hiệu của [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
1 cho biết có nên xoay [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
6 theo hướng bên trái hay bên phải hay không.
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
1 là dương, thì đầu vào sẽ được xoay từ bên trái sang hướng phải và nếu [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
1 âm, đầu vào sẽ được xoay từ bên phải sang hướng trái. Mã bên dưới trình bày cách xoay một mảng bằng phương pháp [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
3 trong Python.from collections import deque
items = deque[[1, 2]]
items.append[3] # deque == [1, 2, 3]
items.rotate[1] # The deque is now: [3, 1, 2]
items.rotate[-1] # Returns deque to original state: [1, 2, 3]
item = items.popleft[] # deque == [2, 3]
4 lấy from collections import deque
items = deque[[1, 2]]
items.append[3] # deque == [1, 2, 3]
items.rotate[1] # The deque is now: [3, 1, 2]
items.rotate[-1] # Returns deque to original state: [1, 2, 3]
item = items.popleft[] # deque == [2, 3]
5 làm đầu vào và xoay nó đến các vị trí bằng giá trị from collections import deque
items = deque[[1, 2]]
items.append[3] # deque == [1, 2, 3]
items.rotate[1] # The deque is now: [3, 1, 2]
items.rotate[-1] # Returns deque to original state: [1, 2, 3]
item = items.popleft[] # deque == [2, 3]
6. Nếu from collections import deque
items = deque[[1, 2]]
items.append[3] # deque == [1, 2, 3]
items.rotate[1] # The deque is now: [3, 1, 2]
items.rotate[-1] # Returns deque to original state: [1, 2, 3]
item = items.popleft[] # deque == [2, 3]
5 là một mảng hai chiều, chúng ta sẽ cần chỉ định trục nào chúng ta cần áp dụng vòng quay; Mặt khác, phương pháp [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
0 sẽ áp dụng vòng quay trên cả hai trục.from collections import deque
items = deque[[1, 2]]
items.append[3] # deque == [1, 2, 3]
items.rotate[1] # The deque is now: [3, 1, 2]
items.rotate[-1] # Returns deque to original state: [1, 2, 3]
item = items.popleft[] # deque == [2, 3]
9, [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
0 cũng xoay mảng từ phải sang trái nếu giá trị dương và phải sang trái nếu giá trị âm. Mã ví dụ dưới đây trình bày cách xoay một mảng trong Python bằng phương pháp [5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
0.Một
>>> import numpy
>>> a=numpy.arange[1,10] #Generate some data
>>> numpy.roll[a,1]
array[[9, 1, 2, 3, 4, 5, 6, 7, 8]]
>>> numpy.roll[a,-1]
array[[2, 3, 4, 5, 6, 7, 8, 9, 1]]
>>> numpy.roll[a,5]
array[[5, 6, 7, 8, 9, 1, 2, 3, 4]]
>>> numpy.roll[a,9]
array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
2 được tối ưu hóa để kéo và đẩy vào cả hai đầu. Họ thậm chí có một phương pháp >>> import numpy
>>> a=numpy.arange[1,10] #Generate some data
>>> numpy.roll[a,1]
array[[9, 1, 2, 3, 4, 5, 6, 7, 8]]
>>> numpy.roll[a,-1]
array[[2, 3, 4, 5, 6, 7, 8, 9, 1]]
>>> numpy.roll[a,5]
array[[5, 6, 7, 8, 9, 1, 2, 3, 4]]
>>> numpy.roll[a,9]
array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
3 chuyên dụng.from collections import deque
items = deque[[1, 2]]
items.append[3] # deque == [1, 2, 3]
items.rotate[1] # The deque is now: [3, 1, 2]
items.rotate[-1] # Returns deque to original state: [1, 2, 3]
item = items.popleft[] # deque == [2, 3]
CodeForester
359K16 Huy hiệu vàng102 Huy hiệu bạc126 Huy hiệu đồng16 gold badges102 silver badges126 bronze badges
Đã trả lời ngày 27 tháng 1 năm 2010 lúc 20:46Jan 27, 2010 at 20:46
4
Điều gì về việc chỉ sử dụng
>>> import numpy
>>> a=numpy.arange[1,10] #Generate some data
>>> numpy.roll[a,1]
array[[9, 1, 2, 3, 4, 5, 6, 7, 8]]
>>> numpy.roll[a,-1]
array[[2, 3, 4, 5, 6, 7, 8, 9, 1]]
>>> numpy.roll[a,5]
array[[5, 6, 7, 8, 9, 1, 2, 3, 4]]
>>> numpy.roll[a,9]
array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
4?5>>> import numpy >>> a=numpy.arange[1,10] #Generate some data >>> numpy.roll[a,1] array[[9, 1, 2, 3, 4, 5, 6, 7, 8]] >>> numpy.roll[a,-1] array[[2, 3, 4, 5, 6, 7, 8, 9, 1]] >>> numpy.roll[a,5] array[[5, 6, 7, 8, 9, 1, 2, 3, 4]] >>> numpy.roll[a,9] array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
Loại bỏ mục tại vị trí đã cho trong danh sách và trả về nó. Nếu không có chỉ mục được chỉ định,
6 sẽ xóa và trả về mục cuối cùng trong danh sách. .>>> import numpy >>> a=numpy.arange[1,10] #Generate some data >>> numpy.roll[a,1] array[[9, 1, 2, 3, 4, 5, 6, 7, 8]] >>> numpy.roll[a,-1] array[[2, 3, 4, 5, 6, 7, 8, 9, 1]] >>> numpy.roll[a,5] array[[5, 6, 7, 8, 9, 1, 2, 3, 4]] >>> numpy.roll[a,9] array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
tobias_k
79.6K11 Huy hiệu vàng115 Huy hiệu bạc173 Huy hiệu đồng11 gold badges115 silver badges173 bronze badges
Đã trả lời ngày 5 tháng 12 năm 2011 lúc 20:20Dec 5, 2011 at 20:20
JamgoldjamgoldJamgold
1.7061 Huy hiệu vàng14 Huy hiệu bạc18 Huy hiệu đồng1 gold badge14 silver badges18 bronze badges
7
Numpy có thể làm điều này bằng lệnh
>>> import numpy
>>> a=numpy.arange[1,10] #Generate some data
>>> numpy.roll[a,1]
array[[9, 1, 2, 3, 4, 5, 6, 7, 8]]
>>> numpy.roll[a,-1]
array[[2, 3, 4, 5, 6, 7, 8, 9, 1]]
>>> numpy.roll[a,5]
array[[5, 6, 7, 8, 9, 1, 2, 3, 4]]
>>> numpy.roll[a,9]
array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
8:>>> import numpy
>>> a=numpy.arange[1,10] #Generate some data
>>> numpy.roll[a,1]
array[[9, 1, 2, 3, 4, 5, 6, 7, 8]]
>>> numpy.roll[a,-1]
array[[2, 3, 4, 5, 6, 7, 8, 9, 1]]
>>> numpy.roll[a,5]
array[[5, 6, 7, 8, 9, 1, 2, 3, 4]]
>>> numpy.roll[a,9]
array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
Đã trả lời ngày 13 tháng 10 năm 2012 lúc 10:57Oct 13, 2012 at 10:57
RichardrichardRichard
51.9k30 Huy hiệu vàng170 Huy hiệu bạc243 Huy hiệu Đồng30 gold badges170 silver badges243 bronze badges
3
Nó phụ thuộc vào những gì bạn muốn xảy ra khi bạn làm điều này:
>>> shift[[1,2,3], 14]
Bạn có thể muốn thay đổi:
def shift[seq, n]:
return seq[n:]+seq[:n]
to:
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
0Đã trả lời ngày 27 tháng 1 năm 2010 lúc 21:48Jan 27, 2010 at 21:48
Jcdyerjcdyerjcdyer
18.2K5 Huy hiệu vàng41 Huy hiệu bạc48 Huy hiệu đồng5 gold badges41 silver badges48 bronze badges
4
Cách đơn giản nhất tôi có thể nghĩ đến:
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
1
RUNDOSRUN
9.7055 huy hiệu vàng43 Huy hiệu bạc54 Huy hiệu đồng5 gold badges43 silver badges54 bronze badges
Đã trả lời ngày 8 tháng 7 năm 2014 lúc 12:15Jul 8, 2014 at 12:15
ThijsthijsThijs
3153 Huy hiệu bạc2 Huy hiệu đồng3 silver badges2 bronze badges
2
Chỉ một số ghi chú về thời gian:
Nếu bạn bắt đầu với một danh sách,
>>> import numpy
>>> a=numpy.arange[1,10] #Generate some data
>>> numpy.roll[a,1]
array[[9, 1, 2, 3, 4, 5, 6, 7, 8]]
>>> numpy.roll[a,-1]
array[[2, 3, 4, 5, 6, 7, 8, 9, 1]]
>>> numpy.roll[a,5]
array[[5, 6, 7, 8, 9, 1, 2, 3, 4]]
>>> numpy.roll[a,9]
array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
9 là phương pháp nhanh nhất bạn có thể sử dụng. Điều này có thể được hiển thị với độ phức tạp thời gian một mình:- deque.rotate là o [k] [k = số phần tử]O[k] [k=number of elements]
- Danh sách chuyển đổi deque là O [n]O[n]
- list.append và list.pop đều là O [1]O[1]
Vì vậy, nếu bạn đang bắt đầu với các đối tượng
[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
6, bạn có thể from collections import deque
items = deque[[1, 2]]
items.append[3] # deque == [1, 2, 3]
items.rotate[1] # The deque is now: [3, 1, 2]
items.rotate[-1] # Returns deque to original state: [1, 2, 3]
item = items.popleft[] # deque == [2, 3]
9 với chi phí của O [k]. Nhưng, nếu điểm bắt đầu là một danh sách, độ phức tạp về thời gian của việc sử dụng from collections import deque
items = deque[[1, 2]]
items.append[3] # deque == [1, 2, 3]
items.rotate[1] # The deque is now: [3, 1, 2]
items.rotate[-1] # Returns deque to original state: [1, 2, 3]
item = items.popleft[] # deque == [2, 3]
9 là O [n]. >>> shift[[1,2,3], 14]
3 nhanh hơn ở O [1].Chỉ vì lợi ích của hình minh họa, đây là một số thời gian mẫu trên 1m lặp:
Các phương thức yêu cầu chuyển đổi loại:
4 với đối tượng deque: 0.12380790710449219 giây [nhanh nhất]0.12380790710449219 seconds [fastest]>>> shift[[1,2,3], 14]
4 với chuyển đổi loại: 6.853878974914551 giây6.853878974914551 seconds>>> shift[[1,2,3], 14]
6 với NParray: 6.0491721630096436 giây6.0491721630096436 seconds>>> shift[[1,2,3], 14]
6 với chuyển đổi loại: 27.558452129364014 giây27.558452129364014 seconds>>> shift[[1,2,3], 14]
Liệt kê các phương pháp được đề cập ở đây:
9: 0.32483696937561035 giây [nhanh nhất]0.32483696937561035 seconds [fastest]>>> import numpy >>> a=numpy.arange[1,10] #Generate some data >>> numpy.roll[a,1] array[[9, 1, 2, 3, 4, 5, 6, 7, 8]] >>> numpy.roll[a,-1] array[[2, 3, 4, 5, 6, 7, 8, 9, 1]] >>> numpy.roll[a,5] array[[5, 6, 7, 8, 9, 1, 2, 3, 4]] >>> numpy.roll[a,9] array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
- "
9": 4.819645881652832 giây4.819645881652832 seconds>>> shift[[1,2,3], 14]
- ...
Mã thời gian được sử dụng dưới đây.
collections.deque
Cho thấy rằng việc tạo Deques từ danh sách là O [N]:
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
2Nếu bạn cần tạo các đối tượng deque:
1m lặp lại @ 6.853878974914551 giây
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
3Nếu bạn đã có các đối tượng deque:
1m lặp lại @ 0.12380790710449219 giây
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
4np.roll
Nếu bạn cần tạo nparrays
Các lần lặp 1m @ 27.558452129364014 giây
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
5Nếu bạn đã có nparrays:
1m lặp lại @ 6.0491721630096436 giây
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
6"Thay đổi vị trí"
Không yêu cầu chuyển đổi loại
Các lần lặp 1m @ 4.819645881652832 giây
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
7l.append[l.pop[0]]
Không yêu cầu chuyển đổi loại
Các lần lặp 1m @ 4.819645881652832 giây
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
81m lặp lại @ 0.32483696937561035Jul 4, 2017 at 9:12
Đã trả lời ngày 4 tháng 7 năm 2017 lúc 9:12Purrell
Purrellpurrell16 gold badges55 silver badges70 bronze badges
4
12.1k16 Huy hiệu vàng55 Huy hiệu bạc70 Huy hiệu đồng
Tôi cũng đã quan tâm đến điều này và so sánh một số giải pháp được đề xuất với perfplot [một dự án nhỏ của tôi].
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
9Hóa ra là gợi ý của Kelly Bundy
Thực hiện rất tốt cho tất cả các ca.
def shift[seq, n]:
return seq[n:]+seq[:n]
0:def shift[seq, n]:
return seq[n:]+seq[:n]
1:Về cơ bản, perfplot thực hiện sự thay đổi để tăng các mảng lớn và đo thời gian. Đây là kết quả:
import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
0Mã để tái tạo lô:Jul 20, 2018 at 15:04
Đã trả lời ngày 20 tháng 7 năm 2018 lúc 15:04Nico Schlömer
Nico Schlömernico Schlömer24 gold badges186 silver badges225 bronze badges
6
49K24 Huy hiệu vàng186 Huy hiệu bạc225 Huy hiệu Đồng
import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
1Nếu bạn chỉ muốn lặp lại các tập hợp các phần tử này thay vì xây dựng một cấu trúc dữ liệu riêng biệt, hãy xem xét sử dụng trình lặp để xây dựng biểu thức máy phát:Oct 29, 2012 at 15:34
Đã trả lời ngày 29 tháng 10 năm 2012 lúc 15:34Phil H
Phil HPhil h7 gold badges64 silver badges103 bronze badges
Huy hiệu vàng 19,5K7
import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
2Trên thực tế, ngay cả việc thêm
def shift[seq, n]:
return seq[n:]+seq[:n]
2 vào đầu đó để hoạt động trên một bản sao của danh sách được truyền lại vẫn còn nhanh gấp đôi.Các triển khai khác nhau với một số thời gian tại //gist.github.com/288272
Đã trả lời ngày 27 tháng 1 năm 2010 lúc 23:10Jan 27, 2010 at 23:10
Keturnketurnketurn
4.7503 huy hiệu vàng28 Huy hiệu bạc40 Huy hiệu đồng3 gold badges28 silver badges40 bronze badges
3
Đối với một triển khai bất biến, bạn có thể sử dụng một cái gì đó như thế này:
import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
3
dabuno
3433 Huy hiệu bạc4 Huy hiệu đồng3 silver badges4 bronze badges
Đã trả lời ngày 25 tháng 2 năm 2012 lúc 21:49Feb 25, 2012 at 21:49
BittercoderBitterCoderBittercoder
11.4K9 Huy hiệu vàng57 Huy hiệu bạc76 Huy hiệu đồng9 gold badges57 silver badges76 bronze badges
Có thể một bộ ringbuffer phù hợp hơn. Nó không phải là một danh sách, mặc dù có khả năng nó có thể hoạt động đủ như một danh sách cho mục đích của bạn.
Vấn đề là hiệu quả của sự thay đổi trong danh sách là O [N], trở nên quan trọng đối với các danh sách đủ lớn.
Việc chuyển số vòng tròn chỉ đơn giản là cập nhật vị trí đầu là O [1]
Đã trả lời ngày 27 tháng 1 năm 2010 lúc 21:59Jan 27, 2010 at 21:59
John La Rooyjohn La RooyJohn La Rooy
286K51 Huy hiệu vàng359 Huy hiệu bạc499 Huy hiệu đồng51 gold badges359 silver badges499 bronze badges
Nếu hiệu quả là mục tiêu của bạn, [chu kỳ? Bộ nhớ?] Bạn có thể tốt hơn khi nhìn vào mô -đun mảng: //docs.python.org/l Library/array.html
Mảng không có chi phí của danh sách.
Theo như danh sách thuần túy đi mặc dù, những gì bạn có là tốt như bạn có thể hy vọng làm.
Đã trả lời ngày 27 tháng 1 năm 2010 lúc 20:47Jan 27, 2010 at 20:47
đệ quyrecursive
82K32 Huy hiệu vàng147 Huy hiệu bạc236 Huy hiệu Đồng32 gold badges147 silver badges236 bronze badges
0
Tôi nghĩ rằng bạn đang tìm kiếm điều này:
import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
4Đã trả lời ngày 25 tháng 3 năm 2014 lúc 9:46Mar 25, 2014 at 9:46
1
Một giải pháp khác:
import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
5Đã trả lời ngày 9 tháng 4 năm 2016 lúc 17:05Apr 9, 2016 at 17:05
Damiodamiodamio
5,8613 Huy hiệu vàng35 Huy hiệu bạc55 Huy hiệu Đồng3 gold badges35 silver badges55 bronze badges
import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
6Ví dụ, được đưa ra
import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
7Hàm sẽ trả về
def shift[seq, n]:
return seq[n:]+seq[:n]
3. Ba vòng quay đã được thực hiện:import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
8Ví dụ khác, được đưa ra
import numpy as np
myarray = np.array[[1, 2, 3, 4, 5, 6]]
newarray = np.roll[myarray, 2] #rotate right
print[newarray]
newarray =np.roll[myarray, -2] #rotate left
print[newarray]
9chức năng sẽ trả về
def shift[seq, n]:
return seq[n:]+seq[:n]
4Được
[5 6 1 2 3 4]
[3 4 5 6 1 2]
0chức năng sẽ trả về
def shift[seq, n]:
return seq[n:]+seq[:n]
5
Robc
21K20 Huy hiệu vàng66 Huy hiệu bạc74 Huy hiệu đồng20 gold badges66 silver badges74 bronze badges
Đã trả lời ngày 15 tháng 11 năm 2019 lúc 8:41Nov 15, 2019 at 8:41
Tôi lấy mô hình chi phí này làm tài liệu tham khảo:
//scripts.mit.edu/~6.006/fall07/wiki/index.php?title=Python_Cost_Model
Phương pháp cắt danh sách của bạn và kết hợp hai danh sách phụ là các hoạt động thời gian tuyến tính. Tôi sẽ đề nghị sử dụng POP, đó là một hoạt động thời gian không đổi, ví dụ:
[5 6 1 2 3 4]
[3 4 5 6 1 2]
1
Shanethehat
15.4K11 Huy hiệu vàng55 Huy hiệu bạc86 Huy hiệu Đồng11 gold badges55 silver badges86 bronze badges
Đã trả lời ngày 21 tháng 2 năm 2012 lúc 22:32Feb 21, 2012 at 22:32
Herrfzherrfzherrfz
4.7383 huy hiệu vàng25 Huy hiệu bạc37 Huy hiệu đồng3 gold badges25 silver badges37 bronze badges
2
Tôi không biết nếu đây là 'hiệu quả', nhưng nó cũng hoạt động:
[5 6 1 2 3 4]
[3 4 5 6 1 2]
2Chỉnh sửa: Xin chào một lần nữa, tôi chỉ tìm thấy một vấn đề lớn với giải pháp này! Xem xét mã sau:
[5 6 1 2 3 4]
[3 4 5 6 1 2]
3Phương thức Shift_ClassList [] thực thi cùng mã với x.insert của tôi [0, x.pop []]-Giải pháp, Danh sách khác là một danh sách phụ thuộc từ lớp. Sau khi chuyển nội dung của Danh sách khác cho danh sách MyClass.ClassList, gọi Shift_ClassList [] cũng thay đổi danh sách khác:
Đầu ra bảng điều khiển:
[5 6 1 2 3 4]
[3 4 5 6 1 2]
4Tôi sử dụng Python 2.7. Tôi không biết đó có phải là một lỗi không, nhưng tôi nghĩ nhiều khả năng tôi đã hiểu được điều gì đó ở đây.
Có ai trong số các bạn biết tại sao điều này xảy ra không?
Đã trả lời ngày 17 tháng 5 năm 2013 lúc 16:57May 17, 2013 at 16:57
wese3112wese3112wese3112
Huy hiệu vàng 9311 gold badge1 silver badge6 bronze badges
2
Phương pháp sau là O [n] tại chỗ với bộ nhớ phụ không đổi:
[5 6 1 2 3 4]
[3 4 5 6 1 2]
5Lưu ý rằng trong Python, cách tiếp cận này không hiệu quả khủng khiếp so với những người khác vì nó không thể tận dụng việc triển khai bản địa của bất kỳ phần nào.
Đã trả lời ngày 11 tháng 6 năm 2015 lúc 12:19Jun 11, 2015 at 12:19
DrayxdrayxDRayX
1.0232 huy hiệu vàng12 Huy hiệu bạc19 Huy hiệu đồng2 gold badges12 silver badges19 bronze badges
2
Tôi có điều tương tự. Ví dụ, để thay đổi theo hai ...
[5 6 1 2 3 4]
[3 4 5 6 1 2]
6
Đã trả lời ngày 13 tháng 1 năm 2016 lúc 18:19Jan 13, 2016 at 18:19
Eyoeldefareeeyoeldefareeyoeldefare
1.9571 Huy hiệu vàng14 Huy hiệu bạc24 Huy hiệu đồng1 gold badge14 silver badges24 bronze badges
Tôi nghĩ rằng bạn đã có cách hiệu quả nhất
[5 6 1 2 3 4]
[3 4 5 6 1 2]
7Đã trả lời ngày 23 tháng 8 năm 2017 lúc 21:17Aug 23, 2017 at 21:17
John Ktejikjohn Ktejikjohn ktejik
5.7144 Huy hiệu vàng49 Huy hiệu bạc53 Huy hiệu Đồng4 gold badges49 silver badges53 bronze badges
Jon Bentley trong Lập trình Pearls [Cột 2] mô tả một thuật toán thanh lịch và hiệu quả để xoay một vectơ ____ 51 phần tử
def shift[seq, n]:
return seq[n:]+seq[:n]
7 do >>> import numpy
>>> a=numpy.arange[1,10] #Generate some data
>>> numpy.roll[a,1]
array[[9, 1, 2, 3, 4, 5, 6, 7, 8]]
>>> numpy.roll[a,-1]
array[[2, 3, 4, 5, 6, 7, 8, 9, 1]]
>>> numpy.roll[a,5]
array[[5, 6, 7, 8, 9, 1, 2, 3, 4]]
>>> numpy.roll[a,9]
array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
7 vị trí của >>> import numpy
>>> a=numpy.arange[1,10] #Generate some data
>>> numpy.roll[a,1]
array[[9, 1, 2, 3, 4, 5, 6, 7, 8]]
>>> numpy.roll[a,-1]
array[[2, 3, 4, 5, 6, 7, 8, 9, 1]]
>>> numpy.roll[a,5]
array[[5, 6, 7, 8, 9, 1, 2, 3, 4]]
>>> numpy.roll[a,9]
array[[1, 2, 3, 4, 5, 6, 7, 8, 9]]
7 để lại:Chúng ta hãy xem vấn đề là chuyển đổi mảng
9 thành mảngdef shift[seq, n]: return seq[n:]+seq[:n]
00, nhưng chúng ta cũng cho rằng chúng ta có một hàm đảo ngược các phần tử trong một phần được chỉ định của mảng. Bắt đầu với[5, 6, 1, 2, 3, 4] [2, 3, 4, 5, 6, 1]
9, chúng tôi đảo ngượcdef shift[seq, n]: return seq[n:]+seq[:n]
02 để nhận[5, 6, 1, 2, 3, 4] [2, 3, 4, 5, 6, 1]
03, đảo ngược[5, 6, 1, 2, 3, 4] [2, 3, 4, 5, 6, 1]
04 để có được[5, 6, 1, 2, 3, 4] [2, 3, 4, 5, 6, 1]
05, và sau đó đảo ngược toàn bộ điều để nhận[5, 6, 1, 2, 3, 4] [2, 3, 4, 5, 6, 1]
06, chính xác là[5, 6, 1, 2, 3, 4] [2, 3, 4, 5, 6, 1]
00. Điều này dẫn đến mã sau để xoay:[5, 6, 1, 2, 3, 4] [2, 3, 4, 5, 6, 1]
8[5 6 1 2 3 4] [3 4 5 6 1 2]
Điều này có thể được dịch sang Python như sau:
[5 6 1 2 3 4]
[3 4 5 6 1 2]
9Demo:
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
0
Đã trả lời ngày 1 tháng 7 năm 2018 lúc 16:47Jul 1, 2018 at 16:47
Eugene Yarmasheugene YarmashEugene Yarmash
135K37 Huy hiệu vàng309 Huy hiệu bạc367 Huy hiệu đồng37 gold badges309 silver badges367 bronze badges
Tôi đã tìm kiếm giải pháp tại chỗ cho vấn đề này. Điều này giải quyết mục đích trong O [k].
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
1Đã trả lời ngày 25 tháng 12 năm 2019 lúc 16:14Dec 25, 2019 at 16:14
AnkitankitAnkit
474 Huy hiệu Đồng4 bronze badges
Trường hợp sử dụng là gì? Thông thường, chúng ta thực sự không cần một mảng được thay đổi hoàn toàn -chúng ta chỉ cần truy cập vào một số ít các phần tử trong mảng đã thay đổi.
Nhận được các lát python là thời gian chạy O [k] trong đó k là lát cắt, do đó, một vòng quay cắt lát là thời gian chạy N. lệnh xoay deque cũng là o [k]. Chúng ta có thể làm tốt hơn không?
Hãy xem xét một mảng cực kỳ lớn [giả sử, nó lớn sẽ được tính toán chậm một cách chậm chạp]. Một giải pháp thay thế sẽ là để lại mảng ban đầu một mình và chỉ cần tính toán chỉ số của vật phẩm sẽ tồn tại trong chỉ số mong muốn của chúng tôi sau khi thay đổi một số loại.
Truy cập một phần tử thay đổi do đó trở thành O [1].
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
2Đã trả lời ngày 31 tháng 10 năm 2017 lúc 23:53Oct 31, 2017 at 23:53
Các bản sao chức năng sau được gửi danh sách cho một Templist, do đó chức năng POP không ảnh hưởng đến danh sách ban đầu:
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
3Kiểm tra:
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
4Output:
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
5Đã trả lời ngày 14 tháng 12 năm 2017 lúc 15:21Dec 14, 2017 at 15:21
rnsornsornso
22.6K22 Huy hiệu vàng103 Huy hiệu bạc213 Huy hiệu đồng22 gold badges103 silver badges213 bronze badges
Đối với danh sách
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
08 và giá trị thay đổi mong muốn from collections import deque
items = deque[[1, 2]]
items.append[3] # deque == [1, 2, 3]
items.rotate[1] # The deque is now: [3, 1, 2]
items.rotate[-1] # Returns deque to original state: [1, 2, 3]
item = items.popleft[] # deque == [2, 3]
6 nhỏ hơn độ dài danh sách, chúng ta có thể xác định hàm [5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
10 như dưới đâyless than list length, we can define the function [5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
10 as belowdef rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
6Ví dụ,
[5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
11 Trả về [5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
12 [5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
13 Trả về [5, 6, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 1]
14Đã trả lời ngày 2 tháng 8 năm 2018 lúc 4:48Aug 2, 2018 at 4:48
Helcodehelcodehelcode
1.7301 Huy hiệu vàng12 Huy hiệu bạc29 Huy hiệu đồng1 gold badge12 silver badges29 bronze badges
2
Tôi là "trường học cũ" Tôi xác định hiệu quả trong độ trễ thấp nhất, thời gian xử lý và sử dụng bộ nhớ, kẻ thù của chúng tôi là các thư viện cồng kềnh. Vì vậy, có chính xác một cách đúng:
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
7Đã trả lời ngày 26 tháng 12 năm 2020 lúc 0:35Dec 26, 2020 at 0:35
Dưới đây là một thuật toán hiệu quả không yêu cầu sử dụng bất kỳ cấu trúc dữ liệu bổ sung nào:
def rotate [nums: list [int], k: int]:
def rotate[input, n]:
return input[n:] + input[:n]
myarray = [1, 3, 5, 7, 9]
print[rotate[myarray, 2]] #rotate left
print[rotate[myarray, -2]] #rotate right
8Đã trả lời ngày 3 tháng 1 lúc 14:01Jan 3 at 14:01