2012-01-27 33 views
6

thể trùng lặp:
Good Primer for Python Slice NotationDanh sách [x :: y] làm gì?

Tôi đã đọc qua một số mẫu mã thời gian gần đây và tôi đã đọc khá một vài trang web nhưng tôi chỉ không thể có vẻ để có được những truy vấn quyền đưa cho tôi câu trả lời mà tôi đang tìm kiếm. Nếu có ai có thể giúp tôi, tôi sẽ đánh giá cao nó.

+0

Nếu bạn thực hiện một chút tìm kiếm, bạn sẽ tìm thấy nhiều bài đăng có câu hỏi tương tự (và câu trả lời tương tự). Tôi nghĩ rằng cái này phải được đóng lại – juliomalegria

Trả lời

13

Nó lát

x[startAt:endBefore:skip] 

nếu bạn sử dụng skip = 2, mọi phần tử khác trong danh sách bắt đầu lúc startAt và kết thúc tại endBefore sẽ được chọn. [Hãy nhớ rằng: chỉ số sống giữa các yếu tố list]

Để thấy điều này, nhập

x = range(100) 

tại dấu nhắc Python. Sau đó, hãy thử những điều này

x[::2] 
x[::3] 
x[10:40:6] 

và xem điều gì sẽ xảy ra.

0

Nó có nghĩa là tạo ra một danh sách mới từ x cho đến cuối với bước y:

>>> l = range(10) 
>>> list(l[2::2]) 
[2, 4, 6, 8] 
0

Trả về một danh sách có chứa mọi phần tử YTH danh sách bắt đầu từ chỉ số x.

>>> alist = range(10) 
>>> alist[0::2] 
[0, 2, 4, 6, 8] 
0

Đây là Slice.

[bắt đầu: cuối: bước]

Rời bất kỳ trống đặt chúng tại một giá trị mặc định, trong trường hợp của bạn nó được tham gia tất cả các yếu tố y bắt đầu từ x và đi đến cuối danh sách.

Xem: What is :: (double colon) in Python when subscripting sequences?

2

Đây là cú pháp để cắt danh sách. Khi bạn nói,

list[a:b:c], 

một là chỉ số bắt đầu, b là chỉ số kết thúc và c là kích thước bước không bắt buộc. Điều này sẽ cung cấp cho bạn một danh sách bắt đầu từ chỉ mục a (bao gồm) và kết thúc tại chỉ mục b (độc quyền) chọn các yếu tố tại một bước của c.

Ví dụ,

l = [1,2,3,4,5,6,7] 

Nếu tôi nói l [2: 6: 2], điều này sẽ cho tôi [3,5].

Nếu bạn bỏ qua chỉ mục cuối, như trong câu hỏi của bạn, nó sẽ lấy các phần tử từ chỉ mục bắt đầu (x), chọn mọi phần tử yth cho đến khi nó đến cuối danh sách nếu y dương và bắt đầu danh sách y là số âm.

Ví dụ:l [1 :: - 1] = [2,1]

l [1 :: 2] = [2,4,6]

Kích thước bước mặc định là 1.

9

L[x::y] phương tiện một lát của L trong đó x là chỉ số để bắt đầu và y là kích thước bước. Dưới đây là một số ví dụ bạn có thể thử trong thông dịch

>>> L=range(20) 
>>> L 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 

Nếu bạn muốn mọi phần tử thứ 3

>>> L[::3] 
[0, 3, 6, 9, 12, 15, 18] 

Bây giờ mọi phần tử thứ ba bắt đầu từ L [1]

>>> L[1::3] 
[1, 4, 7, 10, 13, 16, 19] 

Bây giờ mỗi thứ ba phần tử bắt đầu từ L [2]

>>> L[2::3] 
[2, 5, 8, 11, 14, 17] 

Bạn có thể chỉ định một bước tiêu cực đi ngược

>>> L[::-1] 
[19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

Bạn cũng có thể gán cho lát này, nhưng giá trị phải có độ dài giống như lát bạn đang thay thế

>>> L[::3]=[0,0,0,0,0,0,0] 
>>> L 
[0, 1, 2, 0, 4, 5, 0, 7, 8, 0, 10, 11, 0, 13, 14, 0, 16, 17, 0, 19] 

Cuối cùng, bạn có thể xóa mọi phần tử thứ 3 như thế này

>>> del L[::3] 
>>> L 
[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19] 
Các vấn đề liên quan