如何将字符串转换为二维数组?

时间:2020-08-19 02:57:06

标签: python numpy

如何将字符串列表转换为二维数组

字符串是

   ['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]

3 个答案:

答案 0 :(得分:0)

那么您想将每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元素列表,请使用第一种情况。

答案 1 :(得分:0)

如果您有字符串列表,我们可以复制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 ]])

答案 2 :(得分:0)

另一个选择是使用范围和切片(无需导入任何模块):

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