2 nieduże zadania z Python

0

Nie używając pętli:

  1. napisać program, który znajduje 2 równe, znajdujące się jeden obok drugiego elementy w x:
import numpy as np
x = np.random.randint(1, 6, 10)
print(x)

Nie używając pętli i diag():
2) napisać program, który znajduje elementy macierzy, leżące na głównej diagonali:

import numpy as np
x = np.arange(100).reshape(10,10)

Sprawia mi to trudności.

1

Za pomocą pętli nie można, ale chyba list comprehension to nie pętla

import numpy as np  

x = np.random.randint(1,6,10)                                                                                                                                                                               
condition = [x[i] == x[i+1] for i in range(len(x)-1)]                                                                                                                                                       
 print(np.extract(condition, x))     

https://docs.scipy.org/doc/numpy/reference/generated/numpy.extract.html#numpy.extract

0

Można też użyć reduce:

import functools

x = [1, 2, 2, 3, 4, 5, 6, 6, 6, 7, 8, 9, 1, 1, 1, 2, 3]


def my_aggr(acc, arg):
    if arg == acc[1]:
        acc[0].append(arg)
    else:
        acc[1] = arg

    return acc

# akumulator przechowuje: listę wartości, ostatnio rozważaną wartość
yy = functools.reduce(my_aggr, x, [[], None])
print(yy[0])

Jeśli oprócz wartości chcesz znać np. indeksy, to trzeba zmodyfikować funkcję redukującą.

0
x[:-1] == x[1:]

1 użytkowników online, w tym zalogowanych: 0, gości: 1