#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 ]])