Найти индекс элемента в списке списков
Нужен хелп! Есть два списка списков:
List1=[['aaa', '9', 'ddd', '10'], ['ddd', '12', 'hhh', '3'], ['uuu', '8', 'hhh', '15']]
List2=[['uuu', 0, 0, 0, 0], ['hhh', 0, 0, 0, 0], ['ddd', 0, 0, 0, 0], ['aaa', 0, 0, 0, 0]]
Наполнение второго списка происходит через первый, но должна быть привязка к строкам, в данном примере List2[3][0] должен быть связан с List1[0][0].
Собственно вопрос, как получить индекс list2, зная list1? Или поумнее какой вариант предложите.
If int(List1[0][1])<int(List1[0][3]):
List2[2][1]+=1
List2[2][4]+=5
List2[3][3]+=1
Не знаю как обратится к нужным строкам ‘List2’ изначально не известно на каких строках будут находится ‘aaa’ ,‘ddd’
Ответы (2 шт):
Ну, примерно так простым перебором:
list1=[['aaa', '9', 'ddd', '10'], ['ddd', '12', 'hhh', '3'], ['uuu', '8', 'hhh', '15']]
list2=[['uuu', 0, 0, 0, 0], ['hhh', 0, 0, 0, 0], ['ddd', 0, 0, 0, 0], ['aaa', 0, 0, 0, 0]]
for i11,l11 in enumerate(list1):
for i12,l12 in enumerate(l11):
for i21,l21 in enumerate(list2):
for i22,l22 in enumerate(l21):
if l12 == l22:
print(f'list2[{i21}][{i22}] -> list1[{i11}][{i12}]')
Вывод:
list2[3][0] -> list1[0][0]
list2[2][0] -> list1[0][2]
list2[2][0] -> list1[1][0]
list2[1][0] -> list1[1][2]
list2[0][0] -> list1[2][0]
list2[1][0] -> list1[2][2]
import numpy as np
List1=[['aaa', '9', 'ddd', '10'], ['ddd', '12', 'hhh', '3'], ['uuu', '8', 'hhh', '15']]
List2=[['uuu', 0, 0, 0, 0], ['hhh', 0, 0, 0, 0], ['ddd', 0, 0, 0, 0], ['aaa', 0, 0, 0, 0]]
res = [f"{x[0]}: {np.argwhere(np.array(List1)==x[0]).tolist()}" for x in List2]
res:
['uuu: [[2, 0]]', 'hhh: [[1, 2], [2, 2]]', 'ddd: [[0, 2], [1, 0]]', 'aaa: [[0, 0]]']
UPDATE
Если вам нужно получить индексы подсписков, с которыми вам нужно работать по вашему условию, то можете сделать так:
idx = [y[0] for y in [(np.argwhere(np.array(List2)[:,0]==x[0])).flatten() for x in List1 if int(x[1]) < int(x[3])]]
а затем работать со вторым списком в соответствии с отобранными индексами. Например, так:
for i in idx:
List2[i][1]="foo"
(получите такой List2):
[['uuu', 'foo', 0, 0, 0],
['hhh', 0, 0, 0, 0],
['ddd', 0, 0, 0, 0],
['aaa', 'foo', 0, 0, 0]]