2013-08-26 24 views
19

Se ho un elenco di elenchi e voglio solo manipolare un singolo elemento in tale elenco, come potrei fare per farlo?Accesso all'elemento in un elenco di elenchi

Ad esempio:

List1 = [[10,13,17],[3,5,1],[13,11,12]] 

Cosa succede se voglio prendere un valore (ad esempio 50) e guardare solo alla prima sottolista in List1, e sottrarre 10 (il primo valore), quindi aggiungere 13, poi sottrarre 17?

risposta

23

È possibile accedere agli elementi in un elenco di elenchi innanzitutto specificando l'elenco a cui si è interessati e quindi specificando quale elemento di tale elenco si desidera. Ad esempio, 17 è elemento 2 nella lista 0, che è list1[0][2]:

>>> list1 = [[10,13,17],[3,5,1],[13,11,12]] 
>>> list1[0][2] 
17 

Così, il vostro esempio potrebbe essere

50 - list1[0][0] + list1[0][1] - list1[0][2] 
+2

@ John Glad ho potuto fare. Non dimenticare di [accettare una risposta] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). – arshajii

+0

Questo non funziona per gli elenchi di elenchi in python. list1 = [lista2, lista3, lista4] lista [x] [y] non definita. –

+2

@PlokavianNerveGas Sì, funziona, a cosa pensi che sia utile questa risposta? Hai chiamato la tua lista 'lista1' e poi hai tentato di ottenere' lista [x] [y] ', non' lista1 [x] [y] '. Questo è il tuo problema. – numbermaniac

0
50 - List1[0][0] + List[0][1] - List[0][2] 

List[0] ti dà il primo elenco della lista (provare print List[0]). Quindi, ti indicizzi di nuovo per ottenere gli elementi di quella lista. Pensaci in questo modo: (List1[0])[0].

1
List1 = [[10,-13,17],[3,5,1],[13,11,12]] 

num = 50 
for i in List1[0]:num -= i 
print num 
0
for l in list1: 
    val = 50 - l[0] + l[1] - l[2] 
    print "val:", val 

Loop attraverso la lista e fare operazioni sul sottolista come si voleva.

4

È possibile utilizzare itertools.cycle:

>>> from itertools import cycle 
>>> lis = [[10,13,17],[3,5,1],[13,11,12]] 
>>> cyc = cycle((-1, 1)) 
>>> 50 + sum(x*next(cyc) for x in lis[0]) # lis[0] is [10,13,17] 
36 

Qui l'espressione generatore interno sum sarebbe restituire qualcosa di simile:

>>> cyc = cycle((-1, 1)) 
>>> [x*next(cyc) for x in lis[0]] 
[-10, 13, -17] 

È inoltre possibile utilizzare zip qui:

>>> cyc = cycle((-1, 1)) 
>>> [x*y for x, y in zip(lis[0], cyc)] 
[-10, 13, -17] 
+0

'itertools' ha così tante gemme. Grazie, non sapevo su 'ciclo'. –

+0

@DonaldMiner Grazie a Raymond Hettinger per aver creato questo fantastico modulo. ;-) –

0

Questo il codice stamperà ogni singolo numero:

for myList in [[10,13,17],[3,5,1],[13,11,12]]: 
    for item in myList: 
     print(item) 

o per il vostro caso d'uso specifica:

((50 - List1[0][0]) + List1[0][1]) - List1[0][2] 
Problemi correlati