2016-12-03 6 views
2

Woher kennen Sie den Index eines Elements in einer Unterliste? A similar question was asked here für Listen ohne Wie soWoher kennen Sie den Index eines Elements in der Unterliste?

nisten:

L=[[1, 2, 3], [4, 5, 6]] 

Was ich als ausgegeben werden soll, wenn das Element 3 ist:

output=[0][2] 
+0

Können Sie ein Beispiel geben? – Tobias

+0

So, wie Sie es in diesem Link tun – MooingRawr

+0

Bitte sagen Sie uns, was Sie unter 'output = [0] [2]' verstehen, da dies eine Ausnahme auslösen würde. – Tobias

Antwort

2

Vielleicht so etwas wie dieses:

def find_sublist(outer, what): 
    for i, lst in enumerate(outer): 
     try: 
      return i, lst.index(what) 
     except ValueError: 
      pass 

Eigentlich wird output = [0][2] eine Ausnahme auslösen. Nicht sicher, was du damit meinst. Wollen Sie ein Tupel aus zwei Elementen? Ich werde davon ausgehen, dass du es tust.

Sie könnten alternativ etwas eleganter, verwenden wie

In [8]: [(i, sublist.index(3)) for i, sublist in enumerate(L) if 3 in sublist] 
Out[8]: [(0, 2)] 

In [9]: [(i, sublist.index(4)) for i, sublist in enumerate(L) if 4 in sublist] 
Out[9]: [(1, 0)] 
+0

'find_sublist (L, 3)' gibt mir nur eine Ausgabe von 0 und das OP sagt der Ausgang sollte '0, 2' sein – rassar

3

Versuchen Sie folgendes:

def get_sublist_index(lists, item): 
    for sublist in lists: 
     if item in sublist: 
      return lists.index(sublist), sublist.index(item) 

>>> L=[[1,2,3],[4,5,6]] 
>>> get_sublist_index(L, 3) 
(0, 2) 

Oder jedes Einzelteil zu erhalten:

def get_sublist_index(lists, item): 
    for sublist in lists: 
     if item in sublist: 
      yield lists.index(sublist), sublist.index(item) 

Einen generator:

>>> L=[[1,2,3],[4,3,6]] 
>>> get_sublist_index(L, 3) 
<generator object get_sublist_index at 0x1056c5e08> 
>>> [i for i in get_sublist_index(L, 3)] 
[(0, 2), (1, 1)] 

Oder wenn Sie nicht wollen, einen Generator:

def get_sublist_index(lists, item): 
    outList = [] 
    for sublist in lists: 
     if item in sublist: 
      outList.append((lists.index(sublist), sublist.index(item))) 
    return outList 

>>> get_sublist_index(L, 3) 
[(0, 2), (1, 1)] 
>>> 
+0

Dies gibt nur das erste Element, das Sie finden, es sei denn, das ist was OP will. – MooingRawr

+0

@MooingRawr Danke. Ich werde es ändern. – rassar

2
L=[[1,2,3],[4,5,6],[2,3,4,5,3]] 

a = 3 

print([(i,j) for i,x in enumerate(L) if a in x for j,b in enumerate(x) if b == a]) 
#[(0, 2), (2, 1), (2, 4)] 

Liste Verständnis verwenden, können Sie graben und alle Unter Werte zurückgeben. Wenn Sie tiefer gehen müssen, kapseln Sie einfach das Listenverständnis oder schreiben Sie eine Funktion, um es zu tun.

2

"One-line" Lösung numpy.where und numpy.transpose Methoden (die Anfangseingangsanordnung verlängert war ein komplexen Fall abzudecken) unter Verwendung von:

import numpy as np 

L = [[1,2,3],[4,3,6]] # 3 occurs twice 
output = np.transpose(np.where(np.array(L) == 3)) 

print(output) 

Der Ausgang:

[[0 2] 
    [1 1]] 
+0

Wenn die Liste ein Vielfaches davon enthält (zum Beispiel "L = [[1,2,3], [4,3,6]]"), wird zurückgegeben: 'array ([[0, 1], [ 2, 1]]) ' – rassar

+0

bedeutet, dass es' [place1x, place2x], [place1y, place2y] 'zurückgibt, wenn sie es zurückgeben wollen' [place1x, place1y], [place2x, place2y] ' – rassar

+0

@rassar, rechts, Das habe ich behoben, danke für den Hinweis – RomanPerekhrest

1

sollten Sie Zählen Sie für Aufgaben, die Indizes und Sequenzen erfordern, immer auf enumerate:

def find_index(l, val=3): 
    # res holds results 
    res = [] 
    # Go through every sublist in l 
    # index1 indicates which sublist we check 
    for index1, sublist in enumerate(l): 
     # Go through every item in sublist 
     # index2 indicates which item we check 
     for index2, item in enumerate(sublist): 
      # append to result if we find a match 
      if item == val: 
       res.append([index1, index2]) 
    return res 

Mit einer Beispielliste:

L = [[1, 2, 3], [4, 5, 6, 4, 3], [3, 3, 3]] 

dies zurück:

find_index(L) 
[[0, 2], [1, 4], [2, 0], [2, 1], [2, 2]] 
Verwandte Themen