Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python equivalent of Haskell's [1..] (to index a list)

I have a list of elements in python. I don't know the number of elements in the list. I would like to add indexes to the list.

In Haskell, I could do the following

zip [1..] "abcdefghijklmnop"
[(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(6,'f'),(7,'g'),(8,'h'),(9,'i'),(10,'j'),(11,'k'),(12,'l'),(13,'m'),(14,'n'),(15,'o'),(16,'p')]

Now imagine that the string was of unknown size. This would still work in Haskell, and the integer list gives as many integers as necessary until the string runs out.

How would one do the equivalent in Python?

I have tried this:

s = "abcdefghijklmnop"
indexedlist = []
for i,c in enumerate(s):
    indexedlist.append((i,c))

>>> indexedlist
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'), (10, 'k'), (11, 'l'), (12, 'm'), (13, 'n'), (14, 'o'), (15, 'p')]

And it works, but I'm wondering if there is a shorter/cleaner way, since it is 4 lines of code and feels much.

like image 584
user985366 Avatar asked Jul 29 '15 20:07

user985366


2 Answers

Just do list(enumerate(s)). This iterates over the enumerate object and converts it to a list.

like image 90
TigerhawkT3 Avatar answered Oct 05 '22 10:10

TigerhawkT3


You can simplify it with a list comprehension:

>>> [i for i in enumerate(s)]
like image 31
juanchopanza Avatar answered Oct 05 '22 10:10

juanchopanza