Преобразовать список Python в «списки списков»

#python #python-3.x

#python #python-3.x

Вопрос:

Я хочу создать объект списка «список списков» в Python.

Чтобы я мог инициализировать фрейм данных Pandas из этого списка списков.

Вот мой код:

 import os
import re

result = []
final_output = []
output = os.popen('kubectl get namespaces').read()
result = output.split('n')

def remove(string):
    pattern = re.compile(r's ')
    return re.sub(pattern, ',', string)

for item in result:
    final_output.append(remove(item))

print(final_output)
 

Проблема в том, что мои данные в настоящее время находятся в следующем формате списка:

 [
'[resight,True,345]', 
'[creekstuff,True,345]', 
'[digoneutism,True,567]', 
'[directorates,True,354]', 
'[bedsheet,True,499]'
]
 

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

 [
['resight','True','345'], 
['creekstuff','True','345'], 
['digoneutism','True','567'], 
['directorates','True','354'], 
['bedsheet','True','499']
]
 

Итак, кажется, что нужно сделать:

  1. Поместите одинарную кавычку за пределы квадратной скобки
  2. Заключите каждое слово в одинарную кавычку.

Но как этого добиться?

Комментарии:

1. Но, что важно, откуда взялся такой список?

Ответ №1:

Поскольку они следуют очень специфическому шаблону, вы можете избавиться от скобок с помощью операции среза, а затем превратить строку, разделенную запятыми, в список с помощью split :

 >>> data = [
... '[resight,True,345]',
... '[creekstuff,True,345]',
... '[digoneutism,True,567]',
... '[directorates,True,354]',
... '[bedsheet,True,499]'
... ]
>>> [i[1:-1].split(',') for i in data]
[['resight', 'True', '345'], ['creekstuff', 'True', '345'], ['digoneutism', 'True', '567'], ['directorates', 'True', '354'], ['bedsheet', 'True', '499']]
 

Ответ №2:

 list_of_string_list = [
'[resight,True,345]', 
'[creekstuff,True,345]', 
'[digoneutism,True,567]', 
'[directorates,True,354]', 
'[bedsheet,True,499]'
]
#for each element in list_of_string_list
#remove square brackets and split the string into a list using comma as delimeter
list_of_lists = [el.replace("[", "").replace("]", "").split(",") for el in list_of_string_list]

print(list_of_lists)
#OUTPUTS [['resight', 'True', '345'], ['creekstuff', 'True', '345'], ['digoneutism', 'True', '567'], ['directorates', 'True', '354'], ['bedsheet', 'True', '499']]
 

Ответ №3:

Также вы можете использовать модуль re

 import re

data = [
    '[resight,True,345]', 
    '[creekstuff,True,345]', 
    '[digoneutism,True,567]', 
    '[directorates,True,354]', 
    '[bedsheet,True,499]'
]

list_of_lists = [re.findall(r'b(w )b', l) for l in data]
 

Объяснение:

  • re.findall — поиск всех совпадений для данного шаблона;
  • b(w )b — соответствует любому символу слова ([a-zA-Z0-9_]) и гарантирует, что до и после нет символа слова ( b )