tôi có một danh sách với các giá trị lặp đi lặp lại như hình dưới đây:Theo dõi thay đổi giá trị trong một danh sách lặp đi lặp lại bằng Python
x = [1, 1, 1, 2, 2, 2, 1, 1, 1]
Danh sách này được tạo ra từ một mô hình phù hợp với biểu thức chính quy (không hiển thị ở đây). Danh sách được đảm bảo có giá trị lặp lại (nhiều, nhiều lần lặp lại - hàng trăm, nếu không phải hàng nghìn) và không bao giờ được sắp xếp ngẫu nhiên vì đó là những gì regex phù hợp với từng thời điểm.
Điều tôi muốn là theo dõi chỉ mục danh sách mà tại đó các mục nhập thay đổi từ giá trị trước đó. Vì vậy, đối với danh sách trên x
, tôi muốn có danh sách theo dõi thay đổi [3, 6]
cho biết rằng x[3]
và x[6]
khác với các mục nhập trước đó của chúng trong danh sách.
Tôi đã làm được điều này, nhưng tôi đã tự hỏi liệu có cách nào sạch hơn không. Dưới đây là mã của tôi:
x = [1, 1, 1, 2, 2, 2, 1, 1, 1]
flag = []
for index, item in enumerate(x):
if index != 0:
if x[index] != x[index-1]:
flag.append(index)
print flag
Output: [3, 6]
Câu hỏi: Có cách nào sạch hơn để làm những gì tôi muốn, trong ít dòng mã?
cũng nhìn vào nó, bạn có thể loại bỏ 'lag' bằng cách chỉ sử dụng' index-1' trong câu lệnh if thứ hai và thay đổi thứ hai nếu thành '! =' và cách bạn có thể thả người khác và di chuyển mã đó đến nếu –
@JamesKent Đó là một ý tưởng hay. Tôi đã cập nhật câu hỏi và mã. Cảm ơn. – prrao
Bạn đã có 'mục', vì vậy bạn không cần truy cập lại' x [index] 'để so sánh với' x [index-1] ' –