2017-08-26 5 views
1

J'ai une liste de listes comme ceci:Comment appliquer une fonction sur une liste de listes deux à la fois?

all_lists = [list0, list1, list2, list3, ....., listn] 

Et une fonction comme celle qui prend deux arguments de cette all_lists. La fonction conservera les arguments de cette liste all_lists en déplaçant l'index de 1 jusqu'à ce qu'elle atteigne listn.

Existe-t-il un moyen efficace de le faire? Merci!

+0

deux arguments signifient toutes les combinaisons comme 'fonction (sélection0, list1) fonction' 'ou (sélection0, liste2)' – Kallz

Répondre

2

zip la liste avec elle-même et passer des arguments dans une boucle.

for l1, l2 in zip(all_lists[:-1], all_lists[1:]): # or zip(all_lists, all_lists[1:]) 
    function(l1, l2) 

MVCE:

lst = [1, 2, 3, 4] 

for i, j in zip(lst, lst[1:]): 
    print(i, j) 

1 2 
2 3 
3 4 
+0

Vous n'avez pas besoin '[: -1]', donc au mieux c'est un VCE :-P –

+0

@StefanPochmann Du Zen de Python: "Explicite vaut mieux que l'implicite" ...: p –

+3

Meh, c'est seulement le second. La première est «Belle est meilleure que laide» –

1

Si vous voulez avec toutes les combinaisons possibles, vous pouvez utiliser itertools combination méthode

>>> import itertools 
>>> a = [[1,2],[2,3],[3,4]] 
>>> 
>>> for _lst in itertools.combinations(a, 2): 
...  print _lst 
... 
([1, 2], [2, 3]) 
([1, 2], [3, 4]) 
([2, 3], [3, 4]) 

Pour votre code :

all_lists = [list0, list1, list2, list3, ....., listn] 

for l1,l2 in itertools.combinations(all_list , 2): 
    print l1,l2 
    # do stuff