如何用n行和2个列的字符串创建2D列表?
示例:
str = "044010010A1A..."
list_2d = [['04','40'],
['10','01'],
['0A','1A']]...
有人可以帮忙吗?
答案 0 :(得分:5)
您可以使用list comprehension:
>>> s = '044010010A1A'
>>> [[s[i:i+2], s[i+2:i+4]] for i in range(0, len(s), 4)]
[['04', '40'], ['10', '01'], ['0A', '1A']]
答案 1 :(得分:2)
您可以两次使用more_itertools.sliced
:
from more_itertools import sliced
s = '044010010A1A'
res = list(sliced(list(sliced(s, 2)), 2))
[['04', '40'], ['10', '01'], ['0A', '1A']]
如果您不想导入第三方,则可以自己定义sliced
:
from itertools import count, takewhile
def sliced(seq, n):
return takewhile(bool, (seq[i: i + n] for i in count(0, n)))
答案 2 :(得分:1)
当字符串上偶数个元素时,您应该自己处理。使用textwrap可以节省解析的麻烦。它将创建相等的字符串部分,在这种情况下为2
import textwrap
list = textwrap.wrap(str,2)
temp_list = []
for item in list:
temp_list.append(item)
if(len(temp_list)==2):
list_2d.append(temp_list)
temp_list = []
答案 3 :(得分:0)
第一:不要调用您的字符串str
。它已经被python使用。
import numpy as np
[list(l) for l in list(np.reshape(list(S),(int(len(S)/2),2)))]
numpy提供了一种用于重塑列表的快速功能。
答案 4 :(得分:0)
如果您想使用numpy数组而不是2D列表,则可以执行以下技巧:
>>> s = '044010010A1A'
>>> np.array([s]).view('<U2').reshape(-1, 2)
array([['04', '40'],
['10', '01'],
['0A', '1A']], dtype='<U2')
这比使用Eugene Yarmash建议的列表理解或jpp建议的itertools更快,并且
使用numpy数组代替2D列表通常具有更多优势。
但是,如果需要,您可以通过tolist()
方法将一个numpy数组转换为list。