Tôi gặp sự cố sau. Có một danh sách các số nguyên, tôi muốn chia nó thành một danh sách các danh sách, bất cứ khi nào bước giữa hai phần tử của danh sách đầu vào gốc không phải là 1. Ví dụ: input = [0, 1, 3, 5, 6, 7], output = [[0, 1], [3], [5, 6, 7]]Python: chia danh sách các số nguyên dựa trên bước giữa chúng
Tôi đã viết hàm sau, nhưng nó là một địa ngục, và tôi tự hỏi liệu có ai trong số các bạn sẽ giúp tôi có được một giải pháp đẹp hơn. Tôi đã cố gắng sử dụng itertools, nhưng không thể giải quyết nó.
Đây là giải pháp của tôi:
def _get_parts(list_of_indices):
lv = list_of_indices
tuples = zip(lv[:-1], lv[1:])
split_values = []
for i in tuples:
if i[1] - i[0] != 1:
split_values.append(i[1])
string = '/'.join([str(i) for i in lv])
substrings = []
for i in split_values:
part = string.split(str(i))
substrings.append(part[0])
string = string.lstrip(part[0])
substrings.append(string)
result = []
for i in substrings:
i = i.rstrip('/')
result.append([int(n) for n in i.split('/')])
return result
Cảm ơn rất nhiều!
Giải pháp tốt. Tôi nghĩ rằng mô tả sẽ hữu ích: 'j = count()' tạo ra một bộ đếm. Mọi lời gọi tới 'next (j)' sẽ trả về int bước bằng 1. Hành vi python không rõ ràng: giá trị mặc định cho đối số hàm được tạo một lần khi tạo hàm. Vì vậy, 'j' sẽ được khởi tạo với count() chỉ một lần, trong lần gọi tiếp theo tới' key', arg 'j' sẽ có cá thể được tạo trước đó. 'groupby' sẽ thêm vào' g' có thể lặp lại tất cả các mục từ 'inp', có cùng giá trị khóa. Nếu giá trị khóa đã thay đổi - g mới được tạo. Đối với các mục từ inp: item = 0, key = 0-0 = 0; item = 1, khóa = 1-1 = 0; mục = 3, khóa = 3-2 = 1; mục = 5, khóa = 5-3 = 2 v.v. – stalk