Tất cả các câu trả lời khác, và chủ yếu là về khả năng hiểu danh sách, đều rất tuyệt. Nhưng chỉ để giải thích lỗi của bạn:
strip_list = []
for lengths in range(1,20):
strip_list.append(0) #longest word in the text file is 20 characters long
for a in lines:
strip_list.append(lines[a].strip())
a
là một thành viên trong danh sách của bạn, không phải là một chỉ mục. Những gì bạn có thể viết là:
[...]
for a in lines:
strip_list.append(a.strip())
Một nhận xét quan trọng khác: bạn có thể tạo một danh sách trống theo cách này:
strip_list = [0] * 20
Nhưng điều này không phải là quá hữu ích, như .append
gắn thêm thứ vào danh sách của bạn. Trong trường hợp của bạn, không hữu ích khi tạo một danh sách với các giá trị mặc định, vì bạn sẽ tạo danh sách đó cho mỗi mục khi thêm các chuỗi bị tước.
Vì vậy, mã của bạn sẽ giống như:
strip_list = []
for a in lines:
strip_list.append(a.strip())
Nhưng, chắc chắn, cái tốt nhất là cái này, vì nó giống hệt nhau:
stripped = [line.strip() for line in lines]
Trong trường hợp bạn có một cái gì đó phức tạp hơn chỉ là một .strip
, hãy đặt cái này vào một hàm và thực hiện tương tự. Đó là cách dễ đọc nhất để làm việc với danh sách.
strip_list
19 lần sau đó nối các dòng bị tước của bạn. Mã đó có mùi rất khó chịu. Ngoài ra, nếu bạn lấy những thứ đó từ một tệp, bạn nên tách nó ra trong quá trình vào - xây dựng một danh sách lớn sau đó đưa nó vào một danh sách lớn khác không phải là một ý kiến hay. Ngoài ra, mã của bạn không nên phụ thuộc vào việc biết độ dài của từ / dòng dài nhất. Lùi lại một chút - bạn đang cố gắng đạt được điều gì? Bạn sẽ làm gì vớistrip_list
?