Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.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_Data Processing - Fatal编程技术网

Python 将元组中存储的坐标字符串转换为列表

Python 将元组中存储的坐标字符串转换为列表,python,data-processing,Python,Data Processing,我有一个存储在元组序列中的坐标字符串,如”(522187)(522187)(522191)(523188)(522190)(首先存储在一个deque中,然后转换为字符串) 如何将该实体转换为元组列表/数据?所以它看起来像是[(522187),(522187),(522191),(523188),(522190)] 使用split(“,”)进行简单拆分不起作用,因为它会在元组中由于“,”而分隔每个坐标 有没有更方便的方法将元组列表/数据存储在.csv文件的单个单元格中?我需要将从每个试验中收到的所

我有一个存储在元组序列中的坐标字符串,如
”(522187)(522187)(522191)(523188)(522190)
(首先存储在一个deque中,然后转换为字符串)

  • 如何将该实体转换为元组列表/数据?所以它看起来像是
    [(522187),(522187),(522191),(523188),(522190)]
  • 使用split(“,”)进行简单拆分不起作用,因为它会在元组中由于“,”而分隔每个坐标

  • 有没有更方便的方法将元组列表/数据存储在.csv文件的单个单元格中?我需要将从每个试验中收到的所有坐标存储在一个单独的单元中。使用x和y坐标生成两列有时会导致这些数组的长度不等

  • 您可以使用
    )(
    )拆分字符串,然后按摩各个元组:

    >>> [tuple(int(v) for v in a.strip("()").split(", ")) for a in s.split(') (')]
    [(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]
    
    第二,有很多方法。一种方法是将所有坐标存储为单个字符串,并隐式地知道它们是X/Y对:
    522187522187522191,

    或者您可以直接存储
    [(522187),(522187),(522191)]
    ,并使用
    ast.literal_eval()
    将其重新水化为元组列表


    或者,最好使用一种不像CSV那样严格类型化的数据格式,例如,如果单独使用Python,则使用pickle文件;如果需要交换,则使用JSON,…

    答案是,使用正则表达式

    res = [tuple(e.replace(" ", "").split(",")) for e in  re.findall("[1-9]{3}, [1-9]{3}", string)]                                                                                                                                                                                                       
    
    这将是字符串元组的列表。 将它们转换为整数

    list(map(lambda x: (int(x[0]), int(x[1])), res))
    
    

    尚未完成此代码的优化。

    您可以执行以下操作:

    from ast import literal_eval
    
    tuples = '(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)'
    
    result = [literal_eval(f'({x})') for x in tuples.strip('()').split(') (')]
    
    下次你只需记住
    tuples=str(result)
    !你可以用
    result=literal\u eval(tuples)

    检索它,这对我很有用:

    a = '(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)'
    res = list(eval(a.replace(', ',',').replace(' ',',')))
    
    输出:

    [(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]
    

    我感觉到了家庭作业的问题,显示您的代码。顺便说一下,您可以拆分(然后继续)(然后将它们解析为坐标列表,但是我相信正则表达式更适合您的问题。您需要按摩被复制者的答案,以便为您工作—在元组之间插入逗号,如下所示:
    >>ast.literal_eval('[{}]'.format('),('.join)(string.split(')('))>>>>[(522187),(522187),(522191),(523188),(52219),)
    祝你好运!@AKX这真的不是重复的吗?我想是。这回答了你的问题吗?Eval是邪恶的!:(
    ast.literal_Eval()
    会是更安全的替代品。)这成功了!谢谢!我也将尝试使用json格式,因为我可以看到PsychoPy支持它。