2015-05-06 14 views
7

Tôi muốn tìm một số đoạn nhất định của một chuỗi và lưu trữ chúng, tuy nhiên, tôi sẽ cần phải lưu trữ một số lượng lớn các chuỗi này và tôi nghĩ rằng nó có thể thanh lịch hơn để lưu trữ chúng các chỉ số của chuỗi chủ thay vì như một danh sách các chuỗi. Tôi gặp sự cố khi truy lục chỉ mục để sử dụng. Ví dụ:Làm thế nào để lưu trữ các chỉ mục trong một danh sách

index1 = [0:3, 4:8] #invalid syntax 
index2 = ['0:3','5:6'] 

s = 'ABCDEFGHIJKLMN' 

print(s[index2[0]]) #TypeError string indices must be integers 

Tôi có nghĩ về điều này sai không?

+0

Nếu bạn lưu trữ chuỗi con và không chỉ số - không phải là cách này Python sẽ lưu trữ chúng trong nội bộ không? –

Trả lời

14

Cú pháp cắt dựa trên dấu hai chấm chỉ hợp lệ bên trong toán tử lập chỉ mục, ví dụ x[i:j]. Thay vào đó, bạn có thể lưu trữ slice đối tượng trong danh sách của mình, trong đó slice(x,y,z) tương đương với x:y:z, ví dụ:

index = [slice(0,3), slice(5,6)] 
print([s[i] for i in index]) 

sẽ in:

['ABC', 'F'] 
4

Ý tưởng lưu trữ chỉ mục thay vì nền tảng thực tế là tốt nhất.

Đối với các cơ chế, bạn nên lưu trữ các (bắt đầu, kết thúc) số như một tuple của hai số nguyên:

index1 = [(0,3), (4,8)] 

Khi đó là thời gian để tạo lại chuỗi con, viết mã như thế này:

pair = index1[0] # (0,3) 
sub = s[pair[0] : pair[1]] # 'ABC' 
Các vấn đề liên quan