2012-05-13 52 views
21

Cho một danh sáchSlicing một danh sách sử dụng một biến, bằng Python

a = range(10) 

Bạn có thể cắt nó sử dụng những câu như

a[1] 
a[2:4] 

Tuy nhiên, tôi muốn làm điều này dựa trên một biến thiết lập ở nơi khác trong mã. Tôi có thể dễ dàng thực hiện việc này cho người đầu tiên

i = 1 
a[i] 

Nhưng làm cách nào để làm điều này cho người khác? Tôi đã thử lập chỉ mục với một danh sách:

i = [2, 3, 4] 
a[i] 

Nhưng điều đó không hiệu quả. Tôi cũng đã thử sử dụng một chuỗi:

i = "2:4" 
a[i] 

Nhưng điều đó cũng không có tác dụng.

Điều này có khả thi không?

Trả lời

40

đó là slice() là để làm gì:

a = range(10) 
s = slice(2,4) 
print a[s] 

nhưng đó không phải là thực sự rất nhiều khác nhau sau đó sử dụng a[2:4].

7

Tại sao nó phải là một biến duy nhất? Chỉ cần sử dụng hai biến:

i, j = 2, 4 
a[i:j] 

Nếu nó thực sự cần phải là một biến duy nhất bạn có thể sử dụng một tuple.

+1

Trường hợp sử dụng của tôi liên quan đến phân tích chi tiết html, cố gắng tìm phần tử cuối cùng trong bảng html này. Mã trông giống như 'last_row = list (reverseed (parsed_html_rows [-2: -1]))' Trong đánh giá mã, chúng tôi nhận ra rằng tôi có một số 'phạm vi ma thuật' trong mã để lấy ra nhiều thứ khác nhau. Đặt tên cho chúng làm cho nó dễ dàng hơn cho tôi và người đánh giá .. 'last_row_indices = slice (-2, -1)' và 'last_row = list (đảo ngược (hàng [last_row_indices])) # không có thêm wtf'ing về lý do - 2: -1' –

2

Với các bài tập bên dưới, bạn vẫn đang sử dụng cùng một loại thao tác cắt mà bạn hiển thị, nhưng bây giờ có các biến cho giá trị.

a = range(10) 
i = 2 
j = 4 

sau đó

print a[i:j] 
[2, 3] 
2
>>> a=range(10) 
>>> i=[2,3,4] 

>>> a[i[0]:i[-1]] 
range(2, 4) 

>>> list(a[i[0]:i[-1]]) 
[2, 3] 
Các vấn đề liên quan