如何将元组转换为不带逗号和括号的值字符串

2024-05-14 00:35:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过使用

bounds = cursor.fetchone()

我得到一个元组,比如:

(34.2424, -64.2344, 76.3534, 45.2344)

我想要一个类似34.2424 -64.2344 76.3534 45.2344的字符串

是否有一个函数可以做到这一点?


Tags: 函数字符串cursor元组boundsfetchone
3条回答

如果我收到了你的信息,你就得到了一堆浮标,对吗?

如果是,则应使用以下代码:

In [1]: t = (34.2424 , -64.2344 , 76.3534 , 45.2344)

In [2]: ' '.join([str(x) for x in t])
Out[2]: '34.2424 -64.2344 76.3534 45.2344'

我们在这里将元组中的每个值转换为字符串,因为^{}方法只能处理字符串列表。 如果t是一个字符串元组,则代码将只是' '.join(t)

如果要获取格式为"(34.2424 , -64.2344 , 76.3534 , 45.2344)"的字符串,首先应该去掉不必要的parthensis和逗号:

In [3]: t = "(34.2424 , -64.2344 , 76.3534 , 45.2344)"

In [4]: t.strip('()')
Out[4]: '34.2424 , -64.2344 , 76.3534 , 45.2344'

In [5]: numbers = t.strip('()')

In [6]: numbers.split(' , ')
Out[6]: ['34.2424', '-64.2344', '76.3534', '45.2344']

In [7]: ' '.join(numbers.split(' , '))
Out[7]: '34.2424 -64.2344 76.3534 45.2344'

如果您愿意使用*魔法,也可以使用^{}生成任意格式。用一个分隔符来处理这个问题的具体情况实际上有点麻烦:

>>> bounds = (34.2424, -64.2344, 76.3534, 45.2344)
>>> "{} {} {} {}".format(*bounds)

34.2424 -64.2344 76.3534 45.2344

处理任何长度(如join)的更健壮的版本是:

>>> len(bounds)*"{} ".format(*bounds)

但附加值是,如果您想将格式扩展到更复杂的内容,您可以选择:

>>> "{} --> | {:>10} | {:>10} | {:>10} |".format(*bounds)

34.2424 --> |   -64.2344 |    76.3534 |    45.2344 |

从这里开始,您的字符串formatting options非常多样化。

使用^{}

>>> mystring = ' '.join(map(str, (34.2424, -64.2344, 76.3534, 45.2344)))
>>> print mystring
34.2424 -64.2344 76.3534 45.2344

您必须在这里使用map(它将元组中的所有项转换为字符串),否则您将得到一个TypeError


关于^{}函数的一点说明:

map(str, (34.2424, -64.2344, 76.3534, 45.2344)等同于[str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)]

这比使用列表理解要快一点:

$ python -m timeit "map(str, (34.2424, -64.2344, 76.3534, 45.2344))"
1000000 loops, best of 3: 1.93 usec per loop
$ python -m timeit "[str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344)]"
100000 loops, best of 3: 2.02 usec per loop

如对此答案的注释所示,str.join()可以使用生成器而不是列表。通常,这会更快,但在这种情况下,它是

如果我要做:

' '.join(itertools.imap(str, (34.2424, -64.2344, 76.3534, 45.2344)))

它将比使用map()慢。区别在于imap()返回生成器,而map()返回列表(在python 3中,它返回生成器)

如果我要做:

''.join(str(i) for i in (34.2424, -64.2344, 76.3534, 45.2344))

这将比在列表理解周围加括号慢,因为原因是here


在你(OP)的情况下,这两个选项都不重要,因为这里的性能似乎不是什么大问题。但是,如果您曾经处理过浮点/整数的大元组,那么现在您知道如何最大限度地提高效率:)。

相关问题 更多 >