3

I am trying to get the index of an element in nested lists in python - for example [[a, b, c], [d, e, f], [g,h]] (not all lists are the same size). I have tried using

strand_value= [x[0] for x in np.where(min_value_of_non_empty_strands=="a")]

but this is only returning an empty list, even though the element is present. Any idea what I'm doing wrong?

wjandrea
  • 23,210
  • 7
  • 49
  • 68
biophys_chem
  • 67
  • 1
  • 1
  • 5

5 Answers5

6
def find_in_list_of_list(mylist, char):
    for sub_list in mylist:
        if char in sub_list:
            return (mylist.index(sub_list), sub_list.index(char))
    raise ValueError("'{char}' is not in list".format(char = char))

example_list = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]

find_in_list_of_list(example_list, 'b')
(0, 1)
DainDwarf
  • 1,593
  • 9
  • 19
2

suppose your list is like this:

lst = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g','h']]
list_no = 0
pos = 0
for x in range(0,len(lst)):
    try:
        pos = lst[x].index('e')
        break
    except:
        pass

list_no = x

list_no gives the list number and pos gives the position in that list

2

You could do this using List comprehension and enumerate

Code:

lst=[["a", "b", "c"], ["d", "e", "f"], ["g","h"]]
check="a"
print ["{} {}".format(index1,index2) for index1,value1 in enumerate(lst) for index2,value2 in enumerate(value1) if value2==check]

Output:

['0 0']

Steps:

  • I have enumerated through the List of List and got it's index and list
  • Then I have enumerated over the gotten list and checked if it matches the check variable and written it to list if so

This gives all possible output

i.e.)

Code2:

lst=[["a", "b", "c","a"], ["d", "e", "f"], ["g","h"]]
check="a"
print ["{} {}".format(index1,index2) for index1,value1 in enumerate(lst) for index2,value2 in enumerate(value1) if value2==check]

Gives:

['0 0', '0 3']

Notes:

  • You can easily turn this into list of list instead of string if you want
The6thSense
  • 7,631
  • 6
  • 30
  • 63
0

does this suffice?

array = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]
for subarray in array:
    if 'a' in subarray:
        print(array.index(subarray), '-', subarray.index('a'))

This will return 0 - 0. First zero is the index of the subarray inside array, and the last zero is the 'a' index inside subarray.

Miguel Rentes
  • 992
  • 1
  • 10
  • 26
0

Reworked Bhrigu Srivastava's proposal:

def findinlst(lst, val):
    for x in range(0, len(lst)):
        try:
            pos = lst[x].index(val)
            return [x, pos]
        except:
            continue
    return [False, False]  # whatever one wants to get if value not found

arr = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]

findinlst(arr, 'b')
[0, 1]

findInLst(arr, 'g')
[2, 0]

findinlst(arr, 'w')
[False, False]
Yerbol Sapar
  • 23
  • 1
  • 5