1. ホーム
  2. python

[解決済み] 要素が1つだけのタプルを作成する方法

2022-05-07 22:21:27

質問

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

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

解決方法は?

<ブロッククオート

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

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

なぜなら、最初の2つの要素はタプルではなく、ただの文字列だからです。括弧は自動的にタプルになるわけではありません。Pythonにタプルであることを示すために、文字列の後にカンマを追加しなければなりません。

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

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

サンプルコードを修正するには、ここにカンマを追加してください。

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

             ^       ^

から Python Docs :

特別な問題は、0または1の項目を含むタプルの作成です。構文には、これらに対応するための特別な癖があります。空のタプルは空の括弧の組で構成され、1つの項目を持つタプルは値をコンマで囲むことで構成されます(1つの値を括弧で囲むだけでは不十分です)。不格好だが、効果的である。

もし、本当に末尾のカンマの構文が嫌いなら、回避策として listtuple() 関数を使用します。

x = tuple(['a'])