Найти последний элемент списка, который соответствует критерию - PullRequest
0 голосов
/ 26 октября 2018

У меня есть матрица (список типов списков), и я хочу выбрать только последнюю строку, которая соответствует моим критериям.В частности, у меня есть эта матрица:

matrix = [
         [[0], whatever0],
         [[1], whatever1],
         [[1, 0], whatever10],
         [[1, 1], whatever11],
         [[1, 2], whatever12],
         [[1, 3], whatever13],
         [[1, 4], whatever14],
         ]

, и я хочу выбрать только последнюю строку i, такую, что len (matrix [i] [0]) == 1, поэтому ответ должен возвращать [[1], что угодно1].

Не нашли ответа на этот конкретный вопрос.Спасибо.

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Было бы наиболее эффективно просто выполнить итерацию в обратном направлении:

for i in range(len(matrix), -1, -1):
    if len(matrix[i][0]) == 1:
        print(matrix[i])
        break
else:
    print('No matching row found')
0 голосов
/ 26 октября 2018

чек это

>>> matrix = [
...          [[0], "whatever0"],
...          [[1], "whatever1"],
...          [[1, 1], "whatever11"],
...          [[1, 2], "whatever12"],
...          [[1, 3], "whatever13"],
...          [[1, 4], "whatever14"]
...          ]

res=list(filter(lambda x: x[0][0]>0, matrix))[-1]

там res содержит последний элемент первого из первого элемента каждого элемента матрицы (выделенный жирным шрифтом)

... [[0], "what0"],

... [[ 1 ], "что угодно1"],

... [[ 1 , 1], "что угодно11"]

... [[ 1 , 2] **, "что угодно12"],

... [[ 1 , 3] **, «что угодно13»],

... [[ 1 , 4] **, "что угодно14"]

0 голосов
/ 26 октября 2018

Вы можете сделать что-то вроде этого:

matrix = [
    [[0], 'whatever0'],
    [[1], 'whatever1'],
    [[1, 0], 'whatever10'],
    [[1, 1], 'whatever11'],
    [[1, 2], 'whatever12'],
    [[1, 3], 'whatever13'],
    [[1, 4], 'whatever14'],
]

result = next((e for e in reversed(matrix) if len(e[0]) == 1), None)
print(result)

Вывод

[[1], 'whatever1']

Пояснение

Первая итерациячерез список в обратном порядке, используя в обратном порядке и возвращать только те элементы, которые имеют len(e[0]) == 1.Тогда с next получите только первый результат.

...