首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除带元组的格式字符串时的后缀逗号

删除带元组的格式字符串时的后缀逗号
EN

Stack Overflow用户
提问于 2021-07-28 03:39:18
回答 4查看 1.9K关注 0票数 2

我正在用元组进行字符串格式化:

代码语言:javascript
复制
a = (1,2,3)
s = f"something in {a}"
print(s)
代码语言:javascript
复制
'something in (1, 2, 3)'

在遇到单元素元组之前,一切都很好,这会给出:

代码语言:javascript
复制
a = (1,)
s = f"something in {a}"
代码语言:javascript
复制
'something in (1,)'

我真正想要的是:

代码语言:javascript
复制
'something in (1)'

如何使元组字符串格式保持一致并删除后面的逗号?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-07-28 03:45:27

您可以使用自己的格式逻辑。

代码语言:javascript
复制
a = (1,2,3)
s = ','.join([str(x) for x in a])
print(s)  # 1,2,3

a = (1,)
s = ','.join([str(x) for x in a])
print(s)  # 1
票数 2
EN

Stack Overflow用户

发布于 2021-07-28 03:56:41

Python有两个用于格式化值的神奇方法:__str____repr__

__str__可以返回任何字符串,但是__repr__必须返回可以传递给eval并重新创建值的字符串。这不是必需的,但是您应该这样做。如果print过度使用__str__,则尝试使用__repr__。这意味着您可以使用eval(repr(some_value))来克隆值,因为大多数内置类型都正确地重写了__repr__。这就是为什么在格式化(1,)时使用后缀逗号的原因。

如果您真的想格式化元组而不使用后缀逗号,那么请使用

代码语言:javascript
复制
def format_tuple(value):
    return "(" + ",".join(repr(v) for v in value) + ")"
# (1,) -> "(1)"
# () -> "()"
# (1, 2, 3,) -> "(1, 2, 3)"
# (1, 2, 3) -> "(1, 2, 3)"
票数 1
EN

Stack Overflow用户

发布于 2021-07-28 04:13:45

您可以使用regex:

代码语言:javascript
复制
import re

tuple = (1,)
s = "something in "  + re.sub(r',(?=\))', '', str(tuple))
print(s)

结果:

代码语言:javascript
复制
something in (1)

你不需要任何的循环等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68554094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档