Есть ли способ создать новую строку и добавить определенные элементы в эту строку? - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть список python 1D, который в настоящее время содержит целые числа, а затем букву 't'. Например:

list = [1,2,3,'t',2,3,2,'t',1,3,4,'t']

Эти целые числа на самом деле означают числа 123, 232 и 134. Мое решение должно быть массивом с этими числами в виде целых чисел и удаленным 't'. Таким образом, новый список будет 'списком (или numpy массивом), который вставляет новую строку каждый раз, когда встречается' t ', и прежде чем целые числа необходимо сохранить в строке как 123, 232, 134.

Ответы [ 3 ]

3 голосов
/ 11 апреля 2020

Вы можете легко группировать группы с помощью itertools.groupby. Тогда нужно просто покрыть списки целых чисел целыми числами:

from itertools import groupby

l = [1,2,3,'t',2,3,2,'t',1,3,4,'t']

[int("".join(map(str, v))) for k, v in
 groupby(l, key=lambda x: x!='t') if k]

# [123, 232, 134]

Полезно понять, что делает группа ie. Если вы возьмете код, который составляет целые числа из оставшихся групп:

[list(v) for k, v in groupby(l, key=lambda x: x!='t') if k]

# [[1, 2, 3], [2, 3, 2], [1, 3, 4]]

Это просто группирует список по тому, равен ли элемент 't'. k здесь будет либо True, либо False. Это отфильтровывает значения False с помощью if k.

Остальное - просто соединить числа и сделать целое число:

"".join(map(str, v)))

Хорошая особенность использования itertools заключается в том, что он будет корректно обрабатывать большие входные данные - он работает с вещами по мере их поступления.

0 голосов
/ 11 апреля 2020

Вы можете объединить цифры и t s вместе как строку, разделить ее на числовые строки буквой t и преобразовать каждую числовую строку в целое число с int, если оно не пустое (при условии список ввода сохраняется как l):

[int(i) for i in ''.join(map(str, l)).split('t') if i]
0 голосов
/ 11 апреля 2020

Простой метод:

output = []
number = 0
for elem in list:
    if type(elem) == int:
        number = number * 10 + elem
    elif elem == 't':
        output.append(number)
        number = 0
    else:
        # Handle other cases

При этом, я не уверен, что вы подразумеваете под "новой строкой". Вставка элементов таким способом создает одномерный список.

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