2009-10-17 7 views
5

Używam numpy array_obiektu do przechowywania ciągów o zmiennej długości, np.Najdłuższy ciąg w numpy array_obiektu

a = np.array(['hello','world','!'],dtype=np.object_) 

Czy istnieje łatwy sposób na znalezienie długości najdłuższego ciągu w tablicy bez zapętlenia się nad wszystkimi elementami?

Odpowiedz

5

max(a, key=len) daje najdłuższy ciąg (a len(max(a, key=len)) daje jej długość) bez potrzeby kodowania jawnej pętli, ale oczywiście max wykona własną pętlę wewnętrznie, ponieważ nie może zidentyfikować "najdłuższego ciągu" w jakikolwiek inny sposób.

+1

Wielką odpowiedź !!! –

0

Nie jako jedyne miejsce, w którym długość każdego ciągu jest znana, jest ciągiem. Musisz więc dowiedzieć się z każdego ciągu, jaka jest jego długość.

2

Jeśli przechowujesz ciąg w tablicy numpy obiektu dtype, to nie możesz uzyskać rozmiaru obiektów (łańcuchów) bez pętli. Jednakże, jeśli pozwolisz np.array zdecydować dtype, możesz dowiedzieć się długość najdłuższego łańcucha przez wgląd na dtype:

In [64]: a = np.array(['hello','world','!','Oooh gaaah booo gaah?']) 

In [65]: a.dtype 
Out[65]: dtype('|S21') 

In [72]: a.dtype.itemsize 
Out[72]: 21 
0

że chcę, aby uzyskać najdłuższy łańcuch w drugiej kolumnie:

data_array = [['BFNN' 'Forested bog without permafrost or patterning, no internal lawns'] 
      ['BONS' 'Nonpatterned, open, shrub-dominated bog']] 


def get_max_len_column_value(data_array, column): 
    return len(max(data_array[:,[column]], key=len)[0]) 

get_max_len_column_value(data_array, 1) 

>>>64 
Powiązane problemy