从具有给定长度和宽度的字符串创建2D列表

时间:2018-10-20 16:17:03

标签: python python-3.x list

如何用n行和2个列的字符串创建2D列表?

示例:

str = "044010010A1A..."
list_2d = [['04','40'],
['10','01'],
['0A','1A']]...

有人可以帮忙吗?

5 个答案:

答案 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。