STL является в большой степени оптимизированной библиотекой. На самом деле даже предлагается использовать STL в играх, где высокая производительность могла бы быть необходима. Массивы слишком подвержены ошибкам, чтобы использоваться в повседневных задачах. Сегодняшние компиляторы также очень умны и могут действительно произвести превосходный код с STL. Если Вы знаете то, что Вы делаете, STL может обычно обеспечивать необходимую производительность. Например, путем инициализации векторов к необходимому размеру (если Вы знаете от запуска), можно в основном достигнуть производительности массива. Однако могли бы быть случаи, где Вам все еще нужны массивы. При взаимодействии через интерфейс с низкоуровневым кодом (т.е. блок) или старые библиотеки, которые требуют массивов, Вы не могли бы быть в состоянии использовать векторы.
max (a, key = len)
дает самую длинную строку (а len (max (a, key = len))
дает вам ее длину) не требуя от вас кодирования явного цикла, но, конечно, max
будет выполнять свой собственный цикл внутри, поскольку он никак не может идентифицировать «самую длинную строку» каким-либо другим способом.
Если вы сохраняете строку в массиве numpy объектов dtype, вы не можете получить размер объектов (строк) без цикла. Однако, если вы позволите np.array определять dtype, вы можете узнать длину самой длинной строки, посмотрев на 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
Нет, поскольку длина каждой строки известна только по строке. Таким образом, вы должны выяснить у каждой строки, какова ее длина.