2012-11-01 4 views
0

JeAffectation des valeurs d'une liste aux valeurs d'une autre liste

a = [price1, price2] 
b = [[108455, 106406, 103666, 101408, 98830], [3926, 4095, 426]] 

Comment puis-je automatiser l'attribution a[0] égale à b[0] et a[1] à b[1]?

+2

Comment est-ce que wha Tu veux faire autre chose que 'a = b'? – BrenBarn

+1

Que voulez-vous dire par 'automatiser'? Votre question ne semble pas assez claire. – xiaohan2012

+0

Si 'price1' et' price2' sont des variables dont vous voulez modifier les valeurs, vous rencontrez le problème dans une direction étrange. Pourquoi ne pas simplement utiliser 'b [0]' partout où vous auriez utilisé 'price1'? Si ce n'est pas ce que vous essayez de faire, j'ai peur de ne pas comprendre. –

Répondre

0

Voulez-vous associer les chaînes dans a avec les valeurs dans b? IE le nom price1 au premier élément de b? Si donc vous voulez un dictionnaire:

d = {} 
# i is the current position in a 
# key is the value at that position 
for i, key in enumerate(a): 
    d[key] = b[i] 

Voulez-vous juste écraser ce qui est dans b avec un? Son aussi simple que

a[0]=b[0] 

ou

a = b 
+3

'dict (zip (a, b))' serait beaucoup plus pythonique. En supposant que c'est ce qu'il veut réellement. –

0

Pas réel clairement ce que vous cherchez, que diriez-vous:

>>> price1 = 10000 
>>> price2 = 22222 
>>> a = [price1, price2] 
>>> b = [[108455, 106406, 103666, 101408, 98830], [3926, 4095, 426]] 
>>> 
>>> merged_ab = {a_item: b_item for a_item, b_item in zip(a,b)} 
>>> merged_ab 
{10000: [108455, 106406, 103666, 101408, 98830], 22222: [3926, 4095, 426]} 
>>> 

En fait, zip() seul fait sans le clavetage.

>>> zip(a,b) 
[(10000, [108455, 106406, 103666, 101408, 98830]), (22222, [3926, 4095, 426])] 
+1

Pas besoin de comprendre un dictionnaire (ce qui est Python3 +). 'dict (zip (a, b))' est tout ce dont vous avez besoin. –

+0

Lukas, oui dict (zip (a, b)) fait la même chose, cependant, les compréhensions de dictionnaire * sont * disponibles en 2.7 aussi. – monkut

+0

vous avez raison sur la compréhension dictée et 2.7 - comment est-ce doux? :) –

2

Je pense que vous essayez de faire quelque chose comme ça

b = [[108455, 106406, 103666, 101408, 98830], [3926, 4095, 426]] 
price1, price2 = b 

ou sur une seule ligne

price1, price2 = [[108455, 106406, 103666, 101408, 98830], [3926, 4095, 426]] 

Une autre possibilité est de créer un objet mutable avec un attribut pour maintenir la prix

>>> class Price(object): 
...  def __init__(self, value=None): 
...   self.value = value 
...  def __repr__(self): 
...   return "Price({})".format(self.value) 
... 
>>> price1 = Price() 
>>> price2 = Price() 
>>> a = [price1, price2] 
>>> b = [[108455, 106406, 103666, 101408, 98830], [3926, 4095, 426]] 
>>> for i,j in zip(a, b): 
...  i.value = j 
... 
>>> a 
[Price([108455, 106406, 103666, 101408, 98830]), Price([3926, 4095, 426])] 
+0

Dans votre "tout sur une ligne", vous n'avez même pas besoin de l'extérieur '[]'. (c'est-à-dire que vous pouvez décompresser un tuple au lieu d'une liste). – mgilson

Questions connexes