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

新手上路,请多包涵

我通过使用从 sql 查询中检索数据

bounds = cursor.fetchone()

我得到一个像这样的元组:

 (34.2424, -64.2344, 76.3534, 45.2344)

我想要一个像 34.2424 -64.2344 76.3534 45.2344 这样的字符串

是否存在可以做到这一点的功能?

原文由 Below the Radar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 364
2 个回答

使用 str.join()

 >>> 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() 函数的一些说明:

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

由于 此处 解释的原因,它会比将 列表 推导放在方括号中慢。


在您(OP)的情况下,这两个选项都无关紧要,因为这里的性能似乎并不是什么大问题。但是,如果您曾经处理过大型浮点数/整数元组,那么现在您知道使用什么来获得最大效率了:)。

原文由 TerryA 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您愿意使用 * 魔术,您还可以使用 str.format() 生成任意格式。要处理这个问题的特定情况,使用单个分隔符实际上有点麻烦:

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

从这里开始,您的字符串 格式化选项 非常多样化。

原文由 mattsilver 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题