Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

  1. Làm thế nào để
  2. Python làm thế nào
  3. Dịch chuyển hoặc xoay một mảng trong Python

Đã tạo: tháng 12 đến 15 tháng 12 năm 2021

  1. 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
  2. Shift mảng trong Python bằng phương pháp
    [5, 7, 9, 1, 3]
    [7, 9, 1, 3, 5]
    
    0
  3. 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.

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

Shift mảng trong Python bằng phương pháp

[5, 7, 9, 1, 3]
[7, 9, 1, 3, 5]
0

Shift 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

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.

  • Nếu giá trị của
    [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.
  • Phương pháp
    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.
  • Giống như phương pháp
    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.
  • Chúng ta cũng có thể thực hiện chức năng xoay vòng sử dụng cắt mảng trong Python. Phương pháp này không cần bất kỳ thư viện bổ sung nào nhưng kém hiệu quả hơn so với các phương thức được giải thích ở trên.
  • 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]
    

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

    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

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

    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?

    >>> 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])
    
    5

    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,

    >>> 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])
    
    6 sẽ xóa và trả về mục cuối cùng trong danh sách. .

    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

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

    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

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

    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:

    • >>> shift([1,2,3], 14)
      
      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

    Liệt kê các phương pháp được đề cập ở đây:

    • >>> 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: 0.32483696937561035 giây (nhanh nhất)0.32483696937561035 seconds (fastest)
    • "
      >>> shift([1,2,3], 14)
      
      9": 4.819645881652832 giây4.819645881652832 seconds
    • ...

    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]
    
    2

    Nế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]
    
    3

    Nế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]
    
    4

    np.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]
    
    5

    Nế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]
    
    7

    l.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]
    
    8

    1m 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]
    
    9

    Hó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:

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

    def shift(seq, n):
        return seq[n:]+seq[:n]
    
    1:

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?


    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)
    
    0

    Mã để 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)
    
    1

    Nế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)
    
    2

    Trê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 http://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

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

    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: http://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)
    
    6

    Ví 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)
    
    7

    Hà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)
    
    8

    Ví 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)
    
    9

    chứ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]
    
    0

    chứ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:

    http://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]
    
    2

    Chỉ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]
    
    3

    Phươ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]
    
    4

    Tô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]
    
    5

    Lư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

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

    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

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

    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

    def shift(seq, n):
        return seq[n:]+seq[:n]
    
    9 thành mảng
    [5, 6, 1, 2, 3, 4]
    [2, 3, 4, 5, 6, 1]
    
    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
    def shift(seq, n):
        return seq[n:]+seq[:n]
    
    9, chúng tôi đảo ngược
    [5, 6, 1, 2, 3, 4]
    [2, 3, 4, 5, 6, 1]
    
    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]
    [3 4 5 6 1 2]
    
    8

    Đ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]
    
    9

    Demo:

    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
    
    3

    Kiể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
    
    4

    Output:

    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 below

    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
    
    6

    Ví 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

    Hướng dẫn how do you shift an array right in python? - làm thế nào để bạn chuyển một mảng ngay trong python?

    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

    Làm thế nào để bạn chuyển một mảng sang bên phải?

    Một mảng được cho là được xoay đúng nếu tất cả các phần tử của mảng được di chuyển sang phải theo một vị trí. Một cách tiếp cận là lặp qua mảng bằng cách chuyển từng phần tử của mảng sang vị trí tiếp theo. Phần tử cuối cùng của mảng sẽ trở thành phần tử đầu tiên của mảng xoay.loop through the array by shifting each element of the array to its next position. The last element of the array will become the first element of the rotated array.

    Làm thế nào để bạn chuyển một mảng sang trái trong Python?

    Để chuyển các phần của các phần tử mảng của mảng 2D sang trái, hãy sử dụng phương thức numpy.left_shift () trong Python Numpy.Các bit được dịch chuyển sang trái bằng cách nối thêm X2 0S ở bên phải của X1.Vì biểu diễn nội bộ của các số ở định dạng nhị phân, hoạt động này tương đương với việc nhân x1 với 2 ** x2.use the numpy. left_shift() method in Python Numpy. Bits are shifted to the left by appending x2 0s at the right of x1. Since the internal representation of numbers is in binary format, this operation is equivalent to multiplying x1 by 2**x2.

    Làm thế nào để bạn thay đổi hướng của một mảng trong Python?

    Đảo ngược một mảng mô -đun mảng trong Python..
    Sử dụng phương thức lartic ().Tương tự như danh sách, phương thức Reverse () cũng có thể được sử dụng để trực tiếp đảo ngược một mảng trong python của mô -đun mảng.....
    Sử dụng phương thức đảo ngược ().Một lần nữa, phương thức đảo ngược () khi được truyền bằng một mảng, trả về một điều đáng tin cậy với các phần tử theo thứ tự ngược lại ..

    Làm thế nào để bạn thay đổi các yếu tố trong một mảng numpy?

    Nếu chúng ta muốn dịch chuyển phải hoặc thay đổi bên trái các yếu tố của một mảng numpy, chúng ta có thể sử dụng phương thức numpy.roll () trong Python.Numpy.Phương thức cuộn () được sử dụng để cuộn các phần tử mảng dọc theo một trục được chỉ định.use the numpy. roll() method in Python. The numpy. roll() method is used to roll array elements along a specified axis.