Bobo The Fool
Bobo The Fool

Reputation: 15

List to list of tuples conversion

I am brand new to Python. I can change a list to a tuple, for example

li = [1]
tuple(li)

I am trying to create a tuple that gives the item and its position, so a tuple that would come out (1, 0). I have no idea how to get started.

Upvotes: 1

Views: 573

Answers (5)

casablanca
casablanca

Reputation: 39

If you want a tuple of tuples, you can use a generator expression like this;

li = [4, 5, 6]
tuple((li[i], i) for i in range(len(li)))

Or with enumerate;

tuple((v, k) for k,v in enumerate(li))

Both will return;

((4, 0), (5, 1), (6, 2))

If you want a list of tuples, you can use a list comprehension expression like this;

[(li[i], i) for i in range(len(li))]

or with enumerate;

[(v,k) for k, v in enumerate(li)]

Both will return;

[(4, 0), (5, 1), (6, 2)]

Upvotes: 3

Akavall
Akavall

Reputation: 86188

zip with range is another option:

In [4]: li = [2,4,6]

In [5]: zip(li, range(len(li)))
Out[5]: [(2, 0), (4, 1), (6, 2)]

Upvotes: 0

Fallen
Fallen

Reputation: 4565

One possible way is to use enumerate,

li = [10, 20, 30]
list(enumerate(li))

prints

[(0, 10), (1, 20), (2, 30)]

If you want the output to be in (item, position) order, you can use,

[(v, k) for k,v in enumerate(li)]

Upvotes: 0

user2390182
user2390182

Reputation: 73460

Use enumerate which does exactly what you need, just with elements and indexes flipped:

> li = [2, 4, 6]
> [(x, i) for i, x in enumerate(li)]
[(2, 0), (4, 1), (6, 2)]

Upvotes: 1

James
James

Reputation: 106

If you want a just one tuple you could do this:

li = (list[1], 1)

The brackets here are the literal syntax for tuples.

If you wanted to do it for all the elements of the list, you could use a list comprehension:

lis = [(list[i], i) for i in range(len(list))]

Which would create a list of tuples were each tuple has the element and its index.

Upvotes: 0

Related Questions