2

Possible Duplicate:
Python: Once and for all. What does the Star operator mean in Python?

x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)
list(zipped)

x2, y2 = zip(*zip(x, y))
x == list(x2) and y == list(y2)

What type of object does *zip(x, y) return? Why

res = *zip(x, y)
print(res)

doesn't work?

1
  • The second example doesn't work because it doesn't "return an object". Commented Mar 17, 2012 at 22:58

3 Answers 3

7

The asterisk "operator" in Python does not return an object; it's a syntactic construction meaning "call the function with the list given as arguments."

So:

x = [1, 2, 3]
f(*x)

is equivalent to:

f(1, 2, 3)

Blog entry on this (not mine): http://www.technovelty.org/code/python/asterisk.html

1
  • The Python documentation calls '*' in this context an operator, but that's slightly misleading; intuitively, an operator should return an object, but this is really a syntactic construct.
    – Christophe
    Commented Mar 18, 2012 at 19:18
3

*zip(x, y) does not return a type, the * is used to unpack arguments to a function, in your case again zip.

With x = [1, 2, 3] and y = [4, 5, 6] the result of zip(x, y) is [(1, 4), (2, 5), (3, 6)].

This means that zip(*zip(x, y)) is the same as zip((1, 4), (2, 5), (3, 6)) and the result of that becomes [(1, 2, 3), (4, 5, 6)].

0

The * operator in python is commonly known as scatter, it is useful for scatter tuples or lists into a number of variables, and thus is commonly used for input arguments. http://en.wikibooks.org/wiki/Think_Python/Tuples

The double star ** does the same operation on a dictionary, and is very useful for named arguments!

Not the answer you're looking for? Browse other questions tagged or ask your own question.