2 nieduże zadania z Python

2 nieduże zadania z Python
Beata Griškevič
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 40
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:
Kopiuj
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:

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

Sprawia mi to trudności.

SE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 318
1

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

Kopiuj
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

YA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2384
0

Można też użyć reduce:

Kopiuj
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ą.

enedil
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1028
0
Kopiuj
x[:-1] == x[1:]

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.