desiguel
desiguel

Reputation: 535

Converting list of points to list of tuples in python

I've just written some code to convert a list of points into a list of to/from tuples but it doesn't feel very efficient.

I was wondering if anyone had any suggestions to make this more concise?

from_point, to_point = None, None
point_list = []

for p in [1, 5, 2, 4, 7, 9]:
    to_point = p
    if from_point and to_point:
        point_list.append((from_point, to_point))
    from_point = to_point

print(point_list)

Input: [1, 5, 2, 4, 7, 9]

Output: [(1, 5), (5, 2), (2, 4), (4, 7), (7, 9)]

Edit: Changed points to be non sequential.

Upvotes: 1

Views: 908

Answers (4)

pylang
pylang

Reputation: 44465

Using more_itertools:

import more_itertools as mit

list(mit.pairwise([1, 5, 2, 4, 7, 9]))
# [(1, 5), (5, 2), (2, 4), (4, 7), (7, 9)]

Upvotes: 0

NinjaGaiden
NinjaGaiden

Reputation: 3146

What about this?

x=[1, 5, 2, 4, 7, 9]
print [ tuple(x[i:i+2]) for i in xrange(len(x)-1) ]

Upvotes: 0

Alter
Alter

Reputation: 3464

An alternative one line solution

input = [1, 2, 3, 4, 5, 6]
output = [(input[index], input[index+1]) for index in range(len(list)-1)]
print(output)

Upvotes: 0

VHarisop
VHarisop

Reputation: 2826

You can always use zip:

>>> p = [1, 5, 2, 4, 7, 9]
>>> point_list = list(zip(p[:-1], p[1:]))
>>> print(point_list)
[(1, 5), (5, 2), (2, 4), (4, 7), (7, 9)]

Upvotes: 3

Related Questions