Плоская иерархическая строка списка с использованием python - PullRequest
0 голосов
/ 29 апреля 2020

как квартира:

paths = ['[a, c, e]', '[[a, c], [a, b], d]', 'z']

Кому:

paths = [[a, c, e, z], [a, c, d, z] [a, b, d, z]]

1 Ответ

0 голосов
/ 29 апреля 2020
  1. Сначала , вам необходимо преобразовать каждый элемент в представление примера списка: '["a", "c", "e"]'. Для этого: вы должны использовать regex:
import re  
s = '[[a, c], [a, b], d]'  
s = re.sub(r'(?<![\]\[]),', '",', re.sub(r',(?![\]\[])',',"',re.sub(r'\s*,\s*', ',', re.sub(r'(?<!\])\]', '"]',re.sub(r'\[(?!\[)', '["', s))))
Наконец, , процесс сглаживания может быть описан рекурсивным алгоритмом:
def flat(x):  
    if not any(isinstance(t, list) == True for t in x):  
        return x  
    xx = []  
    for item in x:  
        if isinstance(item, str):  
            for j in range(len(xx)):  
                xx[j].append(item)  
        else:  
            item_new = flat(item)  
            if any(isinstance(t, list) == True for t in item_new):  
                xx.extend(item_new)  
            else:  
                xx.append(item_new)  
    return xx  
...