Как передать Кортеж в качестве аргумента в 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)

который работает, но кажется слишком многословным. Есть ли лучший способ?

4 ответов


добавить скобки:

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'>

потому что это не Кортеж, это два аргумента для add метод. Если вы хотите дать его один


скобки, используемые для определения кортежа, являются необязательными в операторах return и assignement. я.е:

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))

Он выдает эту ошибку, потому что список.добавьте принимает только один аргумент

попробуйте это list + = ['x','y','z']