2013-08-26 18 views
19

Jeśli mam listę list i chcę manipulować konkretną pozycją na tej liście, w jaki sposób mogę to zrobić?Dostęp do pozycji na liście list

Na przykład:

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

Co jeśli chcę przybierać wartości (powiedzmy 50) i patrzeć tylko na pierwszym podmenu w List1, i odjąć 10 (pierwsza wartość), a następnie dodać 13, następnie odjąć 17?

Odpowiedz

23

Możesz uzyskać dostęp do elementów na liście-list, najpierw określając, która lista cię interesuje, a następnie określając, który element tej listy chcesz. Na przykład, 17 jest elementem 2 w liście 0, który jest list1[0][2]:

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

Tak, Twój przykład byłoby

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

@John Cieszę się, że mogłem pomóc. Nie zapomnij [zaakceptuj odpowiedzi] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235). – arshajii

+0

To nie działa dla list list w python. lista1 = [lista2, lista3, lista4] lista [x] [y] nie jest zdefiniowana. –

+2

@PlokavianNerveGas Tak, to działa, jak myślisz, dla kogo ta odpowiedź jest przeznaczona? Zadzwoniłeś na listę 'list1', a następnie spróbujesz uzyskać' list [x] [y] ', a nie' list1 [x] [y] '. To Twój problem. – numbermaniac

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

List[0] daje pierwszą listę na liście (wypróbować print List[0]). Następnie indeksujemy go ponownie, aby uzyskać pozycje z tej listy. Pomyśl o tym w ten sposób: (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 poprzez listy i zrobić operację w podmenu jak chciałeś.

4

Można użyć 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 

Tutaj wyrażenie generator wewnątrz sum wróci coś takiego:

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

Można również użyć zip tutaj:

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

'itertools' ma tak wiele klejnotów. Dzięki, nie wiedziałem o "cyklu". –

+0

@DonaldMiner Podziękowania dla Raymonda Hettingera za stworzenie tego niesamowitego modułu. ;-) –

0

ten kod wydrukuje każdy indywidualny numer:

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

Albo dla konkretnego przypadku użycia:

((50 - List1[0][0]) + List1[0][1]) - List1[0][2] 
Powiązane problemy