Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将嵌套元组列表转换为元组列表_Python_String_List_Tuples - Fatal编程技术网

Python 将嵌套元组列表转换为元组列表

Python 将嵌套元组列表转换为元组列表,python,string,list,tuples,Python,String,List,Tuples,我有一个字符串列表,但有些字符串中有一个或两个元组,例如 ["('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')", "('829.37', '381.62', '1022.00', '491.63')"] 我需要这是一个单元组列表,就像 [('829.37', '381.62', '1022.00', '491.63'), ('123.00',

我有一个字符串列表,但有些字符串中有一个或两个元组,例如

["('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')", "('829.37', '381.62', '1022.00', '491.63')"]
我需要这是一个单元组列表,就像

[('829.37', '381.62', '1022.00', '491.63'), ('123.00', '37.00', '813.74', '139.00'), ('753.00', '97.00', '863.74', '179.00')]
问题是,我无法将以下内容分开,因为它包含在同一报价中

"('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')" into ('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')

我尝试了
列表(map(ast.literal\u eval,lst))
,但这与之前有人标记为重复的帖子一样有效。

这似乎是上游数据管道的问题。无论是什么原因导致了这种情况,都应该在应该修复的地方

也就是说,以下内容应满足您的需要:

import ast

entries = [
    "('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00')",
    "('829.37', '381.62', '1022.00', '491.63')"
]

output_entries = list()
for entry in entries:
    obj = ast.literal_eval(entry)
    if obj and isinstance(obj[0], tuple):
        output_entries.extend(obj)
    else:
        output_entries.append(obj)
print(output_entries)
这张照片是:

[('753.00', '97.00', '863.74', '179.00'), ('123.00', '37.00', '813.74', '139.00'), ('829.37', '381.62', '1022.00', '491.63')]
或者,按照@Samwise在注释中的建议,但使用
ast.literal\u eval(…)

因为使用
ast.literal\u eval(…)
更安全:

ast.literal\u eval
如果输入不是有效的Python数据类型,则会引发异常,因此如果不是,则不会执行代码


list(eval(','.join(lst))
Samwise提出的解决方案是正确的!将
eval
切换到
ast.literal\u eval
并且@Samwise比我的好。谢谢@Samwise,它给出了预期的输出。
import ast
output_entries = list(ast.literal_eval(','.join(entries)))