Как преобразовать строку в 2D массив?

#python #numpy

#python #numpy

Вопрос:

Как преобразовать список строк в 2d массив

Строка является

    ['43.417', '42.953', '43.417', '43.290', '43.105', '43.000', '43.105', '43.290', '42.426', '42.953',   
        '42.837', '42.720']

-> [43.417, 42.953],
   [42.417, 43.105],
   [43.105, 43.000],
,,,,
   [42.837, 42.720]
  

Комментарии:

1. Я не понимаю. Откуда взялось значение 42.417? Куда делось значение 43.290?

2. Это строка или список строк?

3. Спасибо, это некоторые координаты некоторой формы.

Ответ №1:

Другой вариант — использовать диапазон и срез (нет необходимости импортировать какой-либо модуль):

 >>> list_ = ['a', 'b', 'c', 'd', 'e']
>>> [list_[i:i 2] for i in range(0, len(list_), 2)]
[['a', 'b'], ['c', 'd'], ['e']]
  

Ответ №2:

Итак, вы хотите сгруппировать каждые 2 элемента в список и собрать их все в большой список?

Если количество элементов в списке четное:

 newList = [oldList[k * 2 : (k   1) * 2] for k in range(len(oldList) // 2)]
  
 [1, 2, 3, 4] -> [[1, 2], [3, 4]]
  

Если количество элементов нечетное и вы хотите включить список из 1 элемента в конце:

 import math

newList = [oldList[k * 2 : (k   1) * 2] for k in range(math.ceil(len(oldList) / 2))]
  
 [1, 2, 3] -> [[1, 2], [3]]
  

Если вы не хотите включать этот список из 1 элемента, тогда используйте первый вариант.

Ответ №3:

Если у вас есть список строк, мы можем скопировать-n-вставить и создать массив:

 In [149]: alist = ['43.417', '42.953', '43.417', '43.290', '43.105', '43.000', '43.105', '43.290', '4
     ...: 2.426', '42.953','42.837', '42.720']                                                       
In [150]: len(alist)                                                                                 
Out[150]: 12
In [151]: np.array(alist, dtype=float)                                                               
Out[151]: 
array([43.417, 42.953, 43.417, 43.29 , 43.105, 43.   , 43.105, 43.29 ,
       42.426, 42.953, 42.837, 42.72 ])
  

Указав dtype, array преобразует строки в числа. Если одно или несколько значений недопустимы, это выдаст ошибку.

Как только у нас будет массив, его легко изменить:

 In [152]: np.array(alist, dtype=float).reshape(6,2)                                                  
Out[152]: 
array([[43.417, 42.953],
       [43.417, 43.29 ],
       [43.105, 43.   ],
       [43.105, 43.29 ],
       [42.426, 42.953],
       [42.837, 42.72 ]])