Python Forum
loop through list with do something
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
loop through list with do something
#1
I have to do something with all combinations in a list.

Initial thought
itertools.combinations(mylist, 2)

But I have to something with the values of mylist and computing them over and over seems not logical.

def myfunct(a)
	#do something with a
	#return something

mylist = [1,2,3,4,5]

for index, item in enumerate(mylist):
	val = myfunct(item)
	for i in mylist[index+1:]:
		# do something with 'val' and with i
so in my example I only have to calculate 'val' once for each loop

my thought is doing this with itertools I have to calculate val for each item everytime.


Brainfart or could I do this better?
Reply
#2
If the items in mylist are hashable, you could use functools.lru_cache
from functools import lru_cache
import itertools as itt

def myfunct(a):
    #do something with a
    #return something
    print('myfunct({})'.format(a))

myf = lru_cache()(myfunct)
 
mylist = [1,2,3,4,5]

for x, y in itt.combinations(mylist, 2):
    val = myf(x)
    print(x, y)
myf.cache_clear()
Output:
myfunct(1) 1 2 1 3 1 4 1 5 myfunct(2) 2 3 2 4 2 5 myfunct(3) 3 4 3 5 myfunct(4) 4 5
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Appending to list of list in For loop nico_mnbl 2 2,318 Sep-25-2020, 04:09 PM
Last Post: nico_mnbl
  Append list into list within a for loop rama27 2 2,307 Jul-21-2020, 04:49 AM
Last Post: deanhystad
  loop through list or double loop 3Pinter 4 3,385 Dec-05-2018, 06:17 AM
Last Post: 3Pinter
  Write a for loop on list of lists without changing the shape of the main list Antonio 3 3,716 Jun-19-2018, 02:16 AM
Last Post: ichabod801
  For looping over a list, editing the list from inside the loop? Krookroo 3 3,893 Sep-04-2017, 05:08 PM
Last Post: Krookroo
  How to change from printFacts ( ) to return a list & Loop over list when writing CSV Ivan1 14 8,142 Aug-30-2017, 12:14 PM
Last Post: metulburr

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020