imdumbplshelp
imdumbplshelp

Reputation: 43

Searching through list of lists

I'm pretty new to python, and I'm stuck on a loop/list problem. I have two lists and want to search through the lists to find matching elements and add an item from that list to a new list.

Here's my code:

newList = []
elements = [["Wood", "elem1"], ["Stone", "elem2"], ["Concrete", "elem3"]]
nameNum = [["Wood", "2316"], ["Concrete", "3360"], ["Stone", "2785"]]

The lists can be longer and not always the same length, but just using 3 examples. What I actually need is newList = ["2316", "2785", "3360"].

Upvotes: 2

Views: 310

Answers (2)

P47 R1ck
P47 R1ck

Reputation: 147

elements = [["Wood", "elem1"], ["Stone", "elem2"], ["Concrete", "elem3"]]
nameNum = [["Wood", "2316"], ["Concrete", "3360"], ["Stone", "2785"]]
new_list =[]
for element in elements:
  for num in nameNum:
    if num[0] in element:
      new_list.append(num[1])
      break
print(new_list)

Looping 2 times in an nested list to extract first the element from elements, then second loop to extract value from nameNum

Upvotes: 1

kederrac
kederrac

Reputation: 17322

from what I understand you want to build a new list from list2 nested elements if the first element from the inner lists is in the list1 in one of the nested lists on the first position:

list1 = [["a", 1], ["b", 2], ["c", 3]]
list2 = [["a", 1], ["c", 3], ["b", 2]]

added = {e[0] for e in list1}

new_list = [e[1] for e in list2 if e[0] in added]

print(new_list)

output:

[1, 3, 2]

after your edit

you can use:

d = {e[0]: i for i, e in enumerate(elements)}
p = sorted([e for e in  nameNum if e[0] in d], key= lambda x: d[x[0]])
newList = [s for _, s in p]
print(newList)

output:

['2316', '2785', '3360']

Upvotes: 2

Related Questions