web-dev-qa-db-ja.com

Pythonでタプルを引数として渡す方法は?

タプルのリストが必要だとします。これが私の最初のアイデアです。

li = []
li.append(3, 'three')

結果:

Traceback (most recent call last):
  File "./foo.py", line 12, in <module>
    li.append('three', 3)
TypeError: append() takes exactly one argument (2 given)

だから私はに頼る:

li = []
item = 3, 'three'
li.append(item)

これは機能しますが、過度に冗長に見えます。もっと良い方法はありますか?

20
Eric Wilson

さらに括弧を追加します。

li.append((3, 'three'))

コンマが付いた括弧は、引数のリストでない限り、タプルを作成します。

つまり:

()    # this is a 0-length Tuple
(1,)  # this is a Tuple containing "1"
1,    # this is a Tuple containing "1"
(1)   # this is number one - it's exactly the same as:
1     # also number one
(1,2) # Tuple with 2 elements
1,2   # Tuple with 2 elements

同様の効果は、長さ0のタプルでも発生します。

type() # <- missing argument
type(()) # returns <type 'Tuple'>
42
viraptor

それはnot Tupleであるためです。これはaddメソッドの2つの引数です。タプルであるone引数を指定する場合、引数自体は(3, 'three')である必要があります。

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> li = []

>>> li.append(3, 'three')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: append() takes exactly one argument (2 given)

>>> li.append( (3,'three') )

>>> li
[(3, 'three')]

>>> 
8
paxdiablo

Tupleの定義に使用される括弧は、returnおよびassignmentステートメントではオプションです。すなわち:

foo = 3, 1
# equivalent to
foo = (3, 1)

def bar():
    return 3, 1
# equivalent to
def bar():
    return (3, 1)

first, second = bar()
# equivalent to
(first, second) = bar()

関数呼び出しでは、タプルを明示的に定義する必要があります。

def baz(myTuple):
    first, second = myTuple
    return first

baz((3, 1))
5
Simon Bergot

list.appendは引数を1つしか受け取らないため、エラーがスローされます

このリストを試してください+ = ['x'、 'y'、 'z']

0