Есть ли какие-либо причины, которые вы хотите сделать это в стеке?
Я спрашиваю, потому что следующее даст вам конструкцию, которая может использоваться аналогичным образом (особенно доступ к значениям с помощью array[index]
), но она намного меньше ограничена по размеру (общий максимальный размер в зависимости от 32-битной / 64-битной модели памяти и доступной памяти (оперативной памяти и памяти подкачки)), поскольку она выделена из кучи.
int arraysize= 4200000;
int *heaparray= new int[arraysize];
...
k= heaparray[456];
...
delete [] heaparray;
return;
Вы можете использовать понимание списка:
arr = [
[ 'A', 'A1', { "1" }],
[ 'A', 'A2', { "2" }],
[ 'B', 'B1', { "3" }],
]
matches = [sublist for sublist in arr if sublist[0] == 'B' and sublist[1] == 'B1']
for match in matches:
print(match)
Понимание списка будет работать здесь:
filtered = [mylist for mylist in mainlist if mainlist[0] == 'B' and mainlist[1] == 'B1']
Затем вы можете использовать a для каждого цикла, чтобы распечатать значения filtered
.
Попробуйте:
my_list = [
[ 'A', 'A1', { .... }],
[ 'A', 'A2', { .... }],
[ 'B'. 'B1', { .... }],
....
]
results = []
for item in my_list:
if item[0] == <criteria1> and item[1] == <criteria2>:
results.append(item)
Вы можете использовать функции filter()
и itemgetter()
(это должно быть быстрее, чем listcomp):
from operator import itemgetter
d = [
['A', 'A1', {}],
['A', 'A2', {}],
['B', 'B1', {}],
]
itemget = itemgetter(0, 1)
result = filter(lambda x: itemget(x) == ('B', 'B1'), d)
for i in result:
print(i)
# ['B', 'B1', {}]