Извлечение числовых значений из элементов подсписка - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть список с подсписками, например:

a = [['CW50', 'GKB15', 'GKB12.5', 'GKB12.5'], ['CW50', 'GKB12.5', 'GKBi12.5'], ['CW50', 'GKB12.5', 'GKB12.5'], ['CW50', 'GKF12.5', 'GKBi15', 'GKB12.5', 'GKB12.5', 'GKB12.5']]

, и я хочу извлечь из него только числовые значения, но с сохранением формы подсписков. Например:

b = [[50, 15, 12.5, 12.5], [50, 12.5, 12.5], [50, 12.5, 12.5], [50, 12.5, 15, 12.5, 12.5, 12.5]]

Я нашел решение, используя re.findall, но не могу сохранить структуру подсписка.

Мой код:

b = []

for i in a:
    for j in i:
        b.append(re.findall(r"[-+]?\d*\.\d+|\d+", j))

OUTPUT:
b =  [50, 15, 12.5, 12.5, 50, 12.5, 12.5, 50, 12.5, 12.5, 50, 12.5, 15, 12.5, 12.5, 12.5]

Ответы [ 2 ]

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

Вы почти получили его, просто добавьте еще один внутренний список, который вы расширяете до:

import re

a = [['CW50', 'GKB15', 'GKB12.5', 'GKB12.5'], ['CW50', 'GKB12.5', 'GKBi12.5'],
     ['CW50', 'GKB12.5', 'GKB12.5'], 
     ['CW50', 'GKF12.5', 'GKBi15', 'GKB12.5', 'GKB12.5', 'GKB12.5']]

b = []

for i in a:
    c = []       # add inner list here
    for j in i:
        c.extend(re.findall(r"[-+]?\d*\.\d+|\d+", j))

    # convert all to float
    c = list(map(float,c))

    b.append(c)


print(b)

Вывод:

[[50.0, 15.0, 12.5, 12.5], [50.0, 12.5, 12.5], [50.0, 12.5, 12.5], 
 [50.0, 12.5, 15.0, 12.5, 12.5, 12.5]]
0 голосов
/ 11 апреля 2020

Вам нужно составить подсписки в пределах b:

b = []

for i in a:
    b.append([])
    for j in i:
        b[-1].append(float(re.findall(r"[-+]?\d*\.\d+|\d+", j)[0]))

Или, для понимания:

b = [[float(re.findall(r"[-+]?\d*\.\d+|\d+", j)[0]) for j in i] for i in a]

Оба дают:

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