将字符串转换为元组而不拆分字符

新手上路,请多包涵

我正在努力将字符串转换为元组,而不在此过程中拆分字符串的字符。有人可以建议一种简单的方法来做到这一点。需要一个班轮。

失败

   a = 'Quattro TT'
   print tuple(a)

作品

  a = ['Quattro TT']
  print tuple(a)

由于我的输入是一个字符串,我通过将字符串转换为列表来尝试下面的代码,这再次将字符串拆分为字符..

失败

a = 'Quattro TT'
print tuple(list(a))

预期输出:

 ('Quattro TT')

生成的输出:

 ('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')

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

阅读 833
2 个回答

你可以做 (a,) 。无需使用功能。 (注意逗号是必须的。)

本质上, tuple(a) 意味着创建 a内容 的元组,而不是仅由 a 本身组成的元组字符串的“内容”(迭代它时得到的内容)是它的字符,这就是它被拆分成字符的原因。

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

查看 有关元组的 Python 教程

一个特殊的问题是包含 0 或 1 个项目的元组的构造:语法有一些额外的怪癖来适应这些。空元组由一对空括号构成;包含一个项目的元组是通过在值后跟一个逗号来构造的(将单个值括在括号中是不够的)。丑陋,但有效。例如:

>  >>> empty = ()
> >>> singleton = 'hello',    # <-- note trailing comma
> >>> len(empty)
> 0
> >>> len(singleton)
> 1
> >>> singleton
> ('hello',)
>
> ```

如果您只在字符串对象周围放置一对括号,它们只会将该表达式转换为带 [括号的表达式](http://docs.python.org/2/reference/expressions.html#parenthesized-forms)(强调已添加):

> 带括号的表达式列表生成表达式列表生成的任何内容:如果列表包含至少一个逗号,则生成一个元组;否则否则,它会产生构成表达式列表的单个表达式。
>
> 一对空括号产生一个空元组对象。由于元组是不可变的,因此适用文字规则(即,空元组的两次出现可能产生也可能不产生相同的对象)。
>
> **请注意,元组不是由括号构成的,而是由逗号运算符构成的。** 空元组是个例外,它需要括号——在表达式中允许未加括号的“无”会导致歧义,并允许常见的拼写错误未被捕获。

那就是(假设 Python 2.7),

a = ‘Quattro TT’ print tuple(a) # <– you create a tuple from a sequence # (which is a string) print tuple([a]) # <– you create a tuple from a sequence # (which is a list containing a string) print tuple(list(a)) # <– you create a tuple from a sequence # (which you create from a string) print (a,) # <– you create a tuple containing the string print (a) # <– it’s just the string wrapped in parentheses


输出符合预期:

(‘Q’, ‘u’, ‘a’, ’t’, ’t’, ‘r’, ‘o’, ‘ ‘, ’T’, ’T’) (‘Quattro TT’,) (‘Q’, ‘u’, ‘a’, ’t’, ’t’, ‘r’, ‘o’, ‘ ‘, ’T’, ’T’) (‘Quattro TT’,) Quattro TT


* * *

在打印语句上添加一些注释。当您尝试在 Python 2.7 中创建单元素元组作为 [打印](http://docs.python.org/2.7/reference/simple_stmts.html#the-print-statement) 语句的一部分时(如 `print (a,)` ),您需要使用带括号的形式,因为 `print a,` 的尾随逗号否则将被视为 print 语句的一部分,从而导致换行符从输出中被抑制而不是被创建的元组:

> 一个 '\\n' 字符写在末尾,除非 print 语句以逗号结尾。

在 Python 3.x 中,示例中的大多数上述用法实际上会引发 `SyntaxError` ,因为在 Python 3 中 `print` [变成一个函数](http://docs.python.org/3.1/whatsnew/3.0.html#print-is-a-function)(你需要添加一对额外的括号) .但特别是这可能会引起混淆:

print (a,) # <– this prints a tuple containing a in Python 2.x # but only a in Python 3.x

”`

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

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