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

Transform string of coordinates stored in a tuple into list

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

  1. 如何将此实体转换为 list/deque 元组?这样它看起来像 [(522, 187), (522, 187), (522, 191), (523, 188), (522, 190)]?

使用 split(',') 进行简单拆分是行不通的,因为它随后会由于元组内的“,”而分隔每个坐标。

  1. 有没有更方便的方法在 .csv 文件的 单个 单元格中存储 list/deque 元组?我需要将每次试验收到的所有坐标存储在一个单独的单元格中。使用 _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 对:522,187,522,187,522,191,...

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

或者,最理想的情况是,您可以使用不像 CSV 那样 字符串类型 的数据格式,例如 pickle 文件,如果您正在使用 Python一个人,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_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)]