【问题标题】:Transform string of coordinates stored in a tuple into list将存储在元组中的坐标字符串转换为列表
【发布时间】:2020-07-06 08:24:24
【问题描述】:

我有一串坐标存储在元组序列中,例如'(522, 187) (522, 187) (522, 191) (523, 188) (522, 190)(先存储在双端队列中,然后转换为字符串)。

  1. 如何将此实体转换为元组列表/双端队列?所以它看起来像[(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]

使用 split(',') 进行简单拆分不起作用,因为它会根据元组内部的 ',' 分隔每个坐标。

  1. 有没有更方便的方法将元组列表/双端队列存储在 .csv 文件的 单个 单元格中?我需要将每次试验收到的所有坐标存储在一个单独的单元格中。使用 _x 和 _y 坐标制作两列有时会导致这些数组的长度不等。

【问题讨论】:

  • 我感觉到作业问题,显示你的代码。
  • 顺便说一句,您可以在 ) ( 上拆分然后将它们解析为坐标列表,但是我相信正则表达式会更适合您的问题。
  • 你需要修改欺骗者的答案才能为你工作——在元组之间插入逗号,如下所示:>>> ast.literal_eval('[{}]'.format('), ('.join(string.split(') (')))) >>> [(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)] 祝你好运!
  • @AKX 这真的不是重复的吗?我认为是。
  • 这能回答你的问题吗? converting a string to a list of tuples

标签: python data-processing


【解决方案1】:

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

>>> [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 对:522,187,522,187,522,191,...

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

或者,最理想的情况是,您可以使用不像 CSV 那样字符串类型的数据格式,例如如果您只使用 Python,则使用 pickle 文件,如果您需要交换,则使用 JSON,. ..

【讨论】:

  • 这成功了!谢谢!也会尝试使用 json 格式,因为我可以看到 PsychoPy 支持它。
【解决方案2】:

你可以这样做:

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_eval(tuples)检索它

【讨论】:

  • Eval 是邪恶的! :((ast.literal_eval() 会是更安全的替代品。)
【解决方案3】:

这对我有用:

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)]

【讨论】:

    【解决方案4】:

    这是答案,使用正则表达式。

    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))
    
    

    这段代码没有经过优化。

    【讨论】:

      猜你喜欢
      • 2022-11-17
      • 2022-11-17
      • 2016-09-26
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多