Вы могли бы пойти на что-то очень простое, например:
s = "10 2 3 4 5 6 7 8"
l = []
i = 0
list_split_str = s.split() # splitting the string according to spaces
while i < len(s) - 1:
l.append([s[i], s[i + 1]])
i += 2
Это должно вывести:
[['10', '2'], ['3', '4'], ['5', '6'], ['7', '8']]
Вы также можете сделать что-то более сложное, например, в двух-liner:
list_split = s.split() # stripping spaces from the string
l = [[a, b] for a, b in zip(list_split[0::2], list_split[1::2])]
Срез здесь означает, что первый список начинается с нулевого индекса и имеет шаг два и поэтому равен [10, 3, 5, ...]
. Второе означает, что оно начинается с индекса 1 и имеет шаг два и поэтому равно [2, 4, 6, ...]
. Таким образом, мы перебираем первый список для значений a
, а второй для значений b
.
zip возвращает список кортежей элементов каждого списка. В этом случае [('10', '2'), ('3', '4'), ('5', '6'), ...]
. Это позволяет нам группировать элементы списков по два и перебирать их как таковые.
Это также работает со списками с нечетной длиной. Например, при s = "10 2 3 4 5 6 7 "
приведенный выше код будет выводить:
[['10', '2'], ['3', '4'], ['5', '6']]
без учета 7, поскольку у него нет друга.