Hướng dẫn right shift list python - danh sách thay đổi bên phải python

Một

def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
3 đượ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
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
4 chuyên dụng.

Nội dung chính

  • collections.deque
  • "Thay đổi vị trí"
  • l.append(l.pop(0))
  • Làm thế nào để bạn thay đổi các yếu tố trong Python?
  • Làm thế nào để bạn xoay ngay trong Python?
  • Làm thế nào để bạn chuyển một mảng sang trái trong Python?
  • Làm thế nào để bạn xoay một phần tử danh sách 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]

Hướng dẫn right shift list python - danh sách thay đổi bên phải python

CodeForester

359K16 Huy hiệu vàng102 Huy hiệu bạc126 Huy hiệu đồng16 gold badges102 silver badges126 bronze badges16 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:46Jan 27, 2010 at 20:46

4

Điều gì về việc chỉ sử dụng

def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
5?
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
6

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,

def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
7 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 badges11 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:20Dec 5, 2011 at 20:20

JamgoldjamgoldJamgoldJamgold

1.7061 Huy hiệu vàng14 Huy hiệu bạc18 Huy hiệu đồng1 gold badge14 silver badges18 bronze badges1 gold badge14 silver badges18 bronze badges

7

Numpy có thể làm điều này bằng lệnh

def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
9:
>>> 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:57Oct 13, 2012 at 10:57

RichardrichardRichardRichard

51.8K30 Huy hiệu vàng169 Huy hiệu bạc243 Huy hiệu Đồng30 gold badges169 silver badges243 bronze badges30 gold badges169 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:

def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]

Đã trả lời ngày 27 tháng 1 năm 2010 lúc 21:48Jan 27, 2010 at 21:48Jan 27, 2010 at 21:48

Jcdyerjcdyerjcdyerjcdyer

18.2K5 Huy hiệu vàng41 Huy hiệu bạc48 Huy hiệu đồng5 gold badges41 silver badges48 bronze badges5 gold badges41 silver badges48 bronze badges

4

Cách đơn giản nhất tôi có thể nghĩ đến:

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

RUNDOSRUN

9.6955 Huy hiệu vàng43 Huy hiệu bạc54 Huy hiệu đồng5 gold badges43 silver badges54 bronze badges5 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:15Jul 8, 2014 at 12:15

ThijsthijsThijsThijs

3153 Huy hiệu bạc2 Huy hiệu đồng3 silver badges2 bronze badges3 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,

def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
10 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)O(k) (k=number of elements)
  • Danh sách chuyển đổi deque là O (n)O(n)O(n)
  • list.append và list.pop đều là O (1)O(1)O(1)

Vì vậy, nếu bạn đang bắt đầu với các đối tượng

def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
11, bạn có thể
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
12 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
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
12 là O (n).
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
14 nhanh hơn tại 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:

  • def shift(seq, n):
        n = n % len(seq)
        return seq[n:] + seq[:n]
    
    15 với đối tượng deque: 0.12380790710449219 giây (nhanh nhất)0.12380790710449219 seconds (fastest)0.12380790710449219 seconds (fastest)
  • def shift(seq, n):
        n = n % len(seq)
        return seq[n:] + seq[:n]
    
    15 với chuyển đổi loại: 6.853878974914551 giây6.853878974914551 seconds6.853878974914551 seconds
  • def shift(seq, n):
        n = n % len(seq)
        return seq[n:] + seq[:n]
    
    17 với NParray: 6.0491721630096436 giây6.0491721630096436 seconds6.0491721630096436 seconds
  • def shift(seq, n):
        n = n % len(seq)
        return seq[n:] + seq[:n]
    
    17 với chuyển đổi loại: 27.558452129364014 giây27.558452129364014 seconds27.558452129364014 seconds

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

  • def shift(seq, n):
        n = n % len(seq)
        return seq[n:] + seq[:n]
    
    10: 0.32483696937561035 giây (nhanh nhất)0.32483696937561035 seconds (fastest)0.32483696937561035 seconds (fastest)
  • "
    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]
    
    20": 4.819645881652832 giây4.819645881652832 seconds4.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):

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

Nếu bạn cần tạo các đối tượng deque:

1m lặp lại @ 6.853878974914551 giâ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]
4

Nếu bạn đã có các đối tượng deque:

1m lặp lại @ 0.12380790710449219 giâ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

np.roll

Nếu bạn cần tạo nparrays

Các lần lặp 1m @ 27.558452129364014 giâ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]
6

Nếu bạn đã có nparrays:

1m lặp lại @ 6.0491721630096436 giâ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])
0

"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

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

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

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

1m lặp lại @ 0.32483696937561035Jul 4, 2017 at 9:12Jul 4, 2017 at 9:12

Đã trả lời ngày 4 tháng 7 năm 2017 lúc 9:12PurrellPurrell

Purrellpurrell16 gold badges55 silver badges70 bronze badges16 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).

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

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.

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]
21:

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]
22:


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

Mã để tái tạo lô:Jul 20, 2018 at 15:04Jul 20, 2018 at 15:04

Đã trả lời ngày 20 tháng 7 năm 2018 lúc 15:04Nico SchlömerNico Schlömer

Nico Schlömernico Schlömer24 gold badges186 silver badges224 bronze badges24 gold badges186 silver badges224 bronze badges

6

49K24 Huy hiệu vàng186 Huy hiệu bạc224 Huy hiệu đồ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])
5

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:34Oct 29, 2012 at 15:34

Đã trả lời ngày 29 tháng 10 năm 2012 lúc 15:34Phil HPhil H

Phil HPhil h7 gold badges64 silver badges103 bronze badges7 gold badges64 silver badges103 bronze badges

Huy hiệu vàng 19,5K7

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

Điều này cũng phụ thuộc vào việc bạn muốn thay đổi danh sách tại chỗ (đột biến nó) hoặc nếu bạn muốn chức năng trả về một danh sách mới. Bởi vì, theo các bài kiểm tra của tôi, một cái gì đó như thế này nhanh hơn ít nhất hai mươi lần so với việc triển khai của bạn có thêm hai danh sách:

Trên thực tế, ngay cả việc thêm

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]
23 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/288272Jan 27, 2010 at 23:10Jan 27, 2010 at 23:10

Đã trả lời ngày 27 tháng 1 năm 2010 lúc 23:10keturnketurn

Keturnketurn3 gold badges28 silver badges40 bronze badges3 gold badges28 silver badges40 bronze badges

3

4.7503 huy hiệu vàng28 Huy hiệu bạc40 Huy hiệu đồ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])
7

Đố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:

dabuno3 silver badges4 bronze badges3 silver badges4 bronze badges

3433 Huy hiệu bạc4 Huy hiệu đồngFeb 25, 2012 at 21:49Feb 25, 2012 at 21:49

Đã trả lời ngày 25 tháng 2 năm 2012 lúc 21:49BittercoderBittercoder

BittercoderBitterCoder9 gold badges57 silver badges76 bronze badges9 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:59Jan 27, 2010 at 21:59

John La Rooyjohn 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 badges51 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:47Jan 27, 2010 at 20:47

đệ quyrecursiverecursive

82K32 Huy hiệu vàng147 Huy hiệu bạc236 Huy hiệu Đồng32 gold badges147 silver badges236 bronze badges32 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
>>> 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

Đã trả lời ngày 25 tháng 3 năm 2014 lúc 9:46Mar 25, 2014 at 9:46Mar 25, 2014 at 9:46

1

Một giải pháp khác:

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

Đã trả lời ngày 9 tháng 4 năm 2016 lúc 17:05Apr 9, 2016 at 17:05Apr 9, 2016 at 17:05

Damiodamiodamiodamio

5,8613 Huy hiệu vàng35 Huy hiệu bạc55 Huy hiệu Đồng3 gold badges35 silver badges55 bronze badges3 gold badges35 silver badges55 bronze badges

>>> shift([1,2,3], 14)
0

Ví dụ, được đưa ra

>>> shift([1,2,3], 14)
1

Hàm sẽ trả về

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]
24. Ba vòng quay đã được thực hiện:
>>> shift([1,2,3], 14)
2

Ví dụ khác, được đưa ra

>>> shift([1,2,3], 14)
3

chức năng sẽ trả về

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

Được

>>> shift([1,2,3], 14)
4

chức năng sẽ trả về

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

Được

Robc20 gold badges66 silver badges74 bronze badges

21K20 Huy hiệu vàng66 Huy hiệu bạc74 Huy hiệu đồng20 gold badges66 silver badges74 bronze badgesNov 15, 2019 at 8:41

Đã trả lời ngày 15 tháng 11 năm 2019 lúc 8:41Nov 15, 2019 at 8:41

http://scripts.mit.edu/~6.006/fall07/wiki/index.php?title=Python_Cost_Model

Tôi lấy mô hình chi phí này làm tài liệu tham khảo:

>>> shift([1,2,3], 14)
5

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ụ:

Shanethehat11 gold badges55 silver badges86 bronze badges

15.4K11 Huy hiệu vàng55 Huy hiệu bạc86 Huy hiệu Đồng11 gold badges55 silver badges86 bronze badgesFeb 21, 2012 at 22:32

Đã trả lời ngày 21 tháng 2 năm 2012 lúc 22:32Feb 21, 2012 at 22:32herrfz

Herrfzherrfzherrfz3 gold badges25 silver badges37 bronze badges

2

4.7383 huy hiệu vàng25 Huy hiệu bạc37 Huy hiệu đồng3 gold badges25 silver badges37 bronze badges

>>> shift([1,2,3], 14)
6

Tôi không biết nếu đây là 'hiệu quả', nhưng nó cũng hoạt động:

>>> shift([1,2,3], 14)
7

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:

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:

>>> shift([1,2,3], 14)
8

Đầu ra bảng điều khiển:

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?May 17, 2013 at 16:57

wese3112wese3112wese3112wese3112

Đã trả lời ngày 17 tháng 5 năm 2013 lúc 16:57May 17, 2013 at 16:571 gold badge1 silver badge6 bronze badges

2

Huy hiệu vàng 9311 gold badge1 silver badge6 bronze badges

>>> shift([1,2,3], 14)
9

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:19Jun 11, 2015 at 12:19

DrayxdrayxDRayXDRayX

1.0232 huy hiệu vàng12 Huy hiệu bạc19 Huy hiệu đồng2 gold badges12 silver badges19 bronze badges2 gold badges12 silver badges19 bronze badges

2

Tôi có điều tương tự. Ví dụ, để thay đổi theo hai ...

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

Đã trả lời ngày 13 tháng 1 năm 2016 lúc 18:19Jan 13, 2016 at 18:19Jan 13, 2016 at 18:19

Eyoeldefareeeyoeldefareeyoeldefareeyoeldefare

1.9571 Huy hiệu vàng14 Huy hiệu bạc24 Huy hiệu đồng1 gold badge14 silver badges24 bronze badges1 gold badge14 silver badges24 bronze badges

Tôi nghĩ rằng bạn đã có cách hiệu quả nhất

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

Đã trả lời ngày 23 tháng 8 năm 2017 lúc 21:17Aug 23, 2017 at 21:17Aug 23, 2017 at 21:17

John Ktejikjohn Ktejikjohn ktejikjohn ktejik

5.7144 Huy hiệu vàng49 Huy hiệu bạc53 Huy hiệu Đồng4 gold badges49 silver badges53 bronze badges4 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ơ ____ ____ 67 phần tử

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]
28 để lại các vị trí
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
8:

Chúng ta hãy xem vấn đề là chuyển đổi mả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]
40 thành mả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]
41, 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
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]
40, chúng tôi đảo ngượ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]
43 để có đượ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]
44, đảo ngượ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]
45 để có đượ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]
46, và sau đó đảo ngược toàn bộ sự việc để có đượ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]
47, chính xác là
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]
41. Điều này dẫn đến mã sau để xoay:
def shift(seq, n):
    return seq[n:]+seq[:n]
2

Điều này có thể được dịch sang Python như sau:

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

Demo:

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

Đã trả lời ngày 1 tháng 7 năm 2018 lúc 16:47Jul 1, 2018 at 16:47Jul 1, 2018 at 16:47

Eugene Yarmasheugene YarmashEugene YarmashEugene Yarmash

135K37 Huy hiệu vàng309 Huy hiệu bạc367 Huy hiệu đồng37 gold badges309 silver badges367 bronze badges37 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 shift(seq, n):
    return seq[n:]+seq[:n]
5

Đã trả lời ngày 25 tháng 12 năm 2019 lúc 16:14Dec 25, 2019 at 16:14Dec 25, 2019 at 16:14

AnkitankitAnkitAnkit

474 Huy hiệu Đồng4 bronze badges4 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 shift(seq, n):
    return seq[n:]+seq[:n]
6

Đã trả lời ngày 31 tháng 10 năm 2017 lúc 23:53Oct 31, 2017 at 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 shift(seq, n):
    return seq[n:]+seq[:n]
7

Kiểm tra:

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

Output:

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

Đã trả lời ngày 14 tháng 12 năm 2017 lúc 15:21Dec 14, 2017 at 15:21Dec 14, 2017 at 15:21

rnsornsornsornso

22.6K22 Huy hiệu vàng103 Huy hiệu bạc213 Huy hiệu đồng22 gold badges103 silver badges213 bronze badges22 gold badges103 silver badges213 bronze badges

Đối với danh sách

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]
49 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]
50 nhỏ hơn độ dài danh sách, chúng ta có thể xác định hàm
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]
51 như dưới đâyless than list length, we can define the function
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]
51 as below
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
0less than list length, we can define the function
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]
51 as below
def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
0

Ví dụ,

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]
52 Trả về
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]
53
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]
54 Trả về
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]
55

Đã trả lời ngày 2 tháng 8 năm 2018 lúc 4:48Aug 2, 2018 at 4:48Aug 2, 2018 at 4:48

Helcodehelcodehelcodehelcode

1.7301 Huy hiệu vàng12 Huy hiệu bạc29 Huy hiệu đồng1 gold badge12 silver badges29 bronze badges1 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 shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
1

Đã trả lời ngày 26 tháng 12 năm 2020 lúc 0:35Dec 26, 2020 at 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 shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]
2

Đã trả lời ngày 3 tháng 1 lúc 14:01Jan 3 at 14:01Jan 3 at 14:01

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

Sử dụng phương thức pop () trong Python, chúng tôi xóa phần tử đầu tiên khỏi danh sách l.THEN, phương thức nối thêm giá trị trong biến G vào danh sách L. Do đó tất cả các phần tử đều được chuyển sang bên trái sang chỉ mục trước đó.Then, the append method appends the value in variable g to the list L. Hence all the elements are shifted to the left to the previous index. Then, the append method appends the value in variable g to the list L. Hence all the elements are shifted to the left to the previous index.

Làm thế nào để bạn xoay ngay trong Python?

Đầu vào: n = 2, list_1 = [1, 2, 3, 4, 5, 6].

Đầu ra: list_1 = [5, 6, 1, 2, 3, 4].

Giải thích: Chúng tôi nhận được danh sách đầu ra sau khi xoay đúng (theo chiều kim đồng hồ) được cho bởi 2 ..

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.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 xoay một phần tử danh sách trong Python?

Hãy thảo luận về những cách khác nhau, chúng ta có thể xoay một danh sách trong Python ....

Phương pháp 1: Xoay danh sách bằng cách sử dụng cắt ..

Phương pháp 2: Xoay danh sách bằng cách sử dụng danh sách hiểu ..

Phương pháp 3: Xoay danh sách bằng cách sử dụng các bộ sưu tập.Deque.quay().