список кортежей строк, возвращаемых в списке в python

#python #string #list

#python #строка #Список

Вопрос:

напишите функцию, которая принимает строку в заданном формате и возвращает список в приведенном ниже формате

 input:  "[(694, 104), (153, 236), (201, 106), (601, 427)]"
o/p: 
(694, 104)
(153, 236)
(201, 106)
(601, 427)
 

я написал приведенный ниже код, но не получил правильного вывода:

 def convertor(string):
    result = (string.split("  "))[0]
    return result


string1 = "[(694, 104), (153, 236), (201, 106), (601, 427)]"

print(convertor(string1.replace("[","").replace("]","")))
 

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

1. Если невозможно импортировать какую-либо встроенную библиотеку, пожалуйста, укажите это в вопросе =)

2. используйте eval(string1)

Ответ №1:

Вы можете использовать ast.literal_eval

 import ast
arr = ast.literal_eval("[(694, 104), (153, 236), (201, 106), (601, 427)]")
for ele in arr:
    print(ele)
 

Вывод

 (694, 104)
(153, 236)
(201, 106)
(601, 427)
 

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

1. Спасибо… но можем ли мы получить без использования этой функции literal_eval(), которая мне нужна, без использования какой-либо встроенной функции

2. ну split,regex,replace , все, что вы делаете, встроено. Как вы можете что-то сделать, не используя buitins?

3. да, вы правы, но вам нужен этот вывод без использования eval() или literal_eva() , так можно ли получить этот ответ без использования этих функций… любое предложение

4. даже я написал приведенный ниже код, используя eval() — def converter(string): return eval(string) res= конвертер(«[(694,104),(153,236),(201,106),(601,427)]») печать (res)

5. код, который вы написали, возвращает формат строки, но мне нужен этот результат в списке.

Ответ №2:

Как насчет использования ast.literal_eval :

 import ast
def convertor(string):
    return ast.literal_eval(string)

string1 = "[(694, 104), (153, 236), (201, 106), (601, 427)]"
print(convertor(string1))
 

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

1. но если я использую print(type(string), я получаю <type ‘str’>

2. я не могу использовать какой-либо модуль или встроенную функцию, только я могу использовать встроенную функцию string

Ответ №3:

Самый простой способ добиться этого — использовать eval (вам не нужно ничего импортировать):

 eval(string1)
# -> [(694, 104), (153, 236), (201, 106), (601, 427)]
 

Но, если вы действительно хотите использовать только str list методы and:

 def convertor(string):
    result = string.strip('[)]').split('), ')
    result = [s ')' for s in result]
    return result

string1 = "[(694, 104), (153, 236), (201, 106), (601, 427)]"
print(convertor(string1))
# -> ['(694, 104)', '(153, 236)', '(201, 106)', '(601, 427)']
 

Для воспроизведения точного вывода:

 for item in convertor(string1):
    print(item)
 
 (694, 104)
(153, 236)
(201, 106)
(601, 427)