Python конвертировать строку строки и Bool в список - PullRequest
1 голос
/ 05 июня 2019

У меня есть строка:

my_string = "'T1', 'T2', 'T3', 'T4', True, False"

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

my_list = ['T1', 'T2', 'T3', True, False]

Я пытался сделать my_string.split(', '), но он преобразовывает True и False в str, что мне не нужно.

Я мог бы написать функцию, но я чувствую, что есть что-то питонское и очень простое для этого.

Чтобудет лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 05 июня 2019

Вы можете использовать от ast.literal_eval до , чтобы превратить строковое представление списка в список .Чтобы сделать вашу строку представлением списка, вам нужно добавить открывающие и закрывающие скобки.

from ast import literal_eval
my_string = "'T1', 'T2', 'T3', 'T4', True, False"
my_list = literal_eval("[" + my_string + "]")
print(my_list)
#['T1', 'T2', 'T3', 'T4', True, False]

Видны два последних элемента: bool:

print([type(x) for x in my_list])
#[str, str, str, str, bool, bool]

Обновление

Более точное решение, предложенное @ Chris_Rands

my_list = list(literal_eval(my_string))
0 голосов
/ 06 июня 2019

Итак, вы действительно близки и имеете половину решения, все, что вам нужно сделать сейчас, это перебрать список и преобразовать строку «True» в bool True.Ниже приведено полное решение:

string = "'T1', 'T2', 'T3', 'T4', True, False"
list = string.split(', ') #Split string into list

number = 0   #create a number so you can track what element of the list you are at

for i in list: #For each item in the list
    if i.upper() == 'TRUE':
        list[number] = True #Replace any 'True' with bool True
        number += 1 #Move number to next item in list
    elif i.upper() == 'FALSE':
        list[number] = False
        number += 1
    else:
        number += 1 #If item is not 'True' or 'False' go to to next item
print(list)

Существуют более компактные и элегантные способы сделать это, но я оставил это простым, чтобы его было легко понять.Верхний знак после i означает, что любой способ ввода True или TRue или TrUe или TRUE и т. Д. Будет преобразован в bool True, что не позволят другие два решения.

Надеюсь, это поможет.

0 голосов
/ 05 июня 2019

Быстрый способ сделать это с пониманием списка:

[
  value.strip() if value.strip().startswith("'") else value == 'True' 
  for value in string.split(',')
]

pault ответ выглядит лучше:)

...