Преобразование строки в список каждых двух чисел в строке - PullRequest
1 голос
/ 08 ноября 2019

Строка = 1 2 3 4

Программа должна вернуть = [[1,2],[3,4]] в python

Я хочу, чтобы строка была преобразована в список каждых двух элементов из строки

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

вот решение, если точная длина чисел делится на 2

def every_two_number(number_string):
    num = number_string.split(' ')
    templist = []
    if len(num) % 2 == 0:
        for i in range(0,len(num),2):
            templist.append([int(num[i]),int(num[i+1])])
    return templist

print(every_two_number('1 2 3 4'))

. Вы можете удалить условие if и заключить код в try и except, если хотите, чтобы ваша строкапо-прежнему конвертировать, даже если номер вашего списка не делится на 2

def every_two_number(number_string):
    num = number_string.split(' ')
    templist = []
    try:
        for i in range(0,len(num),2):
            templist.append([int(num[i]),int(num[i+1])])
    except:
        pass
    return templist

print(every_two_number('1 2 3 4 5'))
0 голосов
/ 08 ноября 2019

Вы могли бы пойти на что-то очень простое, например:

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, поскольку у него нет друга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...