I could swear I’ve seen the function (or method) that takes a list, like this [3, 7, 19] and makes it into iterable list of tuples, like so: [(0,3), (1,7), (2,19)] to use it instead of:
for i in range(len(name_of_list)):
name_of_list[i] = something
but I can’t remember the name and googling “iterate list” gets nothing.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
>>> a = [3,4,5,6] >>> for i, val in enumerate(a): ... print i, val ... 0 3 1 4 2 5 3 6 >>>
Method 2
Yep, that would be the enumerate function! Or more to the point, you need to do:
list(enumerate([3,7,19])) [(0, 3), (1, 7), (2, 19)]
Method 3
Here’s another using the zip function.
>>> a = [3, 7, 19] >>> zip(range(len(a)), a) [(0, 3), (1, 7), (2, 19)]
Method 4
Here it is a solution using map function:
>>> a = [3, 7, 19] >>> map(lambda x: (x, a[x]), range(len(a))) [(0, 3), (1, 7), (2, 19)]
And a solution using list comprehensions:
>>> a = [3,7,19] >>> [(x, a[x]) for x in range(len(a))] [(0, 3), (1, 7), (2, 19)]
Method 5
python enumerate function will be satisfied your requirements
result = list(enumerate([1,3,7,12])) print result
output
[(0, 1), (1, 3), (2, 7),(3,12)]
Method 6
If you have multiple lists, you can do this combining enumerate and zip:
list1 = [1, 2, 3, 4, 5]
list2 = [10, 20, 30, 40, 50]
list3 = [100, 200, 300, 400, 500]
for i, (l1, l2, l3) in enumerate(zip(list1, list2, list3)):
print(i, l1, l2, l3)
Output:
0 1 10 100 1 2 20 200 2 3 30 300 3 4 40 400 4 5 50 500
Note that parenthesis is required after i. Otherwise you get the error: ValueError: need more than 2 values to unpack
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0