149

以下の例では、すべての要素がタプルであると想定していますが、タプルに1つの文字列しか含まれていないのに、なぜタプルが文字列に変換されるのでしょうか。

>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>> 
>>> for elem in a:
...     print type(elem)
... 
<type 'str'>
<type 'str'>
<type 'tuple'>
4

4 に答える 4

191

単一の文字列しか含まれていないのに、タプルが文字列に変換されるのはなぜですか?

a = [('a'), ('b'), ('c', 'd')]

最初の 2 つの要素はタプルではないためです。それらは単なる文字列です。括弧によって自動的にタプルになるわけではありません。文字列の後にコンマを追加して、それがタプルであることを Python に示す必要があります。

>>> type( ('a') )
<type 'str'>

>>> type( ('a',) )
<type 'tuple'>

サンプル コードを修正するには、ここにコンマを追加します。

>>> a = [('a',), ('b',), ('c', 'd')]

             ^       ^

Python ドキュメントから:

特別な問題は、0 個または 1 個のアイテムを含むタプルの構築です。構文には、これらに対応するためのいくつかの特別な癖があります。空のタプルは、括弧の空のペアで構成されます。1 つの項目を持つタプルは、値の後にカンマを付けることによって作成されます (単一の値を括弧で囲むだけでは十分ではありません)。醜いが効果的。

末尾のコンマ構文が本当に嫌いな場合は、回避策として alisttuple()関数に渡します。

x = tuple(['a'])
于 2012-10-13T19:24:00.977 に答える
24

最初の 2 つの例はタプルではなく、文字列です。単一項目のタプルには、次のように末尾のコンマが必要です。

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
于 2012-10-13T19:23:50.857 に答える
13

('a')タプルではなく単なる文字列です。

pythonそれらを次のように解釈するには、最後に余分なコンマを追加する必要がありますtuple: -

>>> a = [('a',), ('b',), ('c', 'd')]
>>> a
[('a',), ('b',), ('c', 'd')]
>>> 
于 2012-10-13T19:24:07.097 に答える