如何在python中创建二维列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在python中创建二维列表相关的知识,希望对你有一定的参考价值。

Python中创建二维列表/数组,即创建一个list,并且这个list的元素还是list。可以用列表解析的方法实现。

创建例子如下:

2d_list = [[0 for col in range(cols)] for row in range(rows)]

其中cols, rows变量替换为你需要的数值即可,例如:

2d_list = [[0 for col in range(9)] for row in range(9)]
# 9*9的二维列表

参考技术A a=[[1,2,3],[4,5,6]]

a[0][0]==1
a[0][1]==2
a[0][2]==3
a[1][0]==4
...
参考技术B a=[[1,2,3],[a,b,c]]
a[0]=[1,2,3]
a[0][0]=1
参考技术C ListA = [ [0 for i in range(5)] for i in range(5)]本回答被提问者采纳

如何在python中创建字节列表?

【中文标题】如何在python中创建字节列表?【英文标题】:How to create bytes list in python? 【发布时间】:2022-01-22 15:40:52 【问题描述】:

我面临在 python 中创建字节列表的挑战。我只想将 int 列表转换为预期结果中提到的字节列表。问题陈述是我想将预期的输出发送到连接到 com 端口的串行设备,并且在当前输出的情况下,串行设备不鼓励使用 '\\' 作为分隔符。请建议我处理字节列表中的“\”的正确方法。

cmdlist = [2, 12, 1, 1, 1, 0, 0, 1, 3, 7, 42, 101, 85, 18]
    
#Convert CMD list to Hex List
for i in range(len(cmdlist)):
    cmdlist[i] = hex(cmdlist[i])

f_cmdList = ''
#Convert hex CMD list to string List
for i in range(len(cmdlist)):
    f_cmdList += '\\' + (cmdlist[i])

Final_cmdlist = (bytes(f_cmdList,'utf-8'))
print(Final_cmdlist)

电流输出:b'\\0x2\\0xc\\0x1\\0x1\\0x1\\0x0\\0x0\\0x1\\0x3\\0x7\\0x2a\\ 0x65\\0x55\\0x12'

预期输出:b'\0x2\0xc\0x1\0x1\0x1\0x0\0x0\0x1\0x3\0x7\0x2a\0x65\0x55\0x12'

谢谢!

【问题讨论】:

你有大于 127 的值吗?或者你为什么这样做? 是的。取值范围为 0 到 255。 您的意图是使用 UTF-8 进行编码,即将值 128 到 255 编码为每个两个字节? 顺便说一句,我非常怀疑你所说的你所期望的就是你所期望的。一堆用零字节分隔的十六进制字符串?你确定吗? 这就像如果我运行上面的代码,我会得到输出字节 - b'\\0x2\\0xc\\0x1\\0x1\\0x1\\0x0\\0x0\\0x1\\0x3\\0x7\\0x2a\\0x65\\0x55\\0x12' 但我想创建一个字节列表,我只想要一个反斜杠而不是字节帧中每个十六进制数字后的 2输出 - b'\0x2\0xc\0x1\0x1\0x1\0x0\0x0\0x1\0x3\0x7\0x2a\0x65\0x55\0x12' 【参考方案1】:

您可以简单地使用bytes 构造函数将列表转换为bytes。您的方法正在尝试创建一个包含字节数组的字符串表示形式的字符串,该字符串在发送到串行设备时将不起作用:

>>> cmdlist = [2, 12, 1, 1, 1, 0, 0, 1, 3, 7, 42, 101, 85, 18]
>>> bytes(cmdlist)
b'\x02\x0c\x01\x01\x01\x00\x00\x01\x03\x07*eU\x12'

【讨论】:

感谢您的快速回复。如果您比较输出的十六进制值,那么我们可以看到存在垃圾数据,或者我们可以说字节构造函数没有将数据转换为十六进制格式作为我们的预期输出。预期输出:b'\0x2\0xc\0x1\0x1\0x1\0x0\0x0\0x1\0x3\0x7\0x2a\0x65\0x55\0x12' bytes 构造函数将数据转换为十六进制。这只是在控制台上打印数组时的表示。因为0x65 也是ASCII e Python 更喜欢将该字符表示为文本。它不会影响您的串行通信。【参考方案2】:

You get what you say you expect 如果你更换你的

f_cmdList += '\\' + (cmdlist[i])

用这个:

f_cmdList += '\0' + cmdlist[i][1:]

但仍然不相信你真的想要那个。

【讨论】:

比较没问题,但是在 ser.write(Final_cmdlist) 中发送Final_cmdlist 时,它将像b'\x00x2\x00xc\x00x1\x00x1\x00x1\x00x0\x00x0\x00x1\x00x3\x00x7\x00x2a\x00x65\x00x55\x00x12' 一样发送到设备,其中设备不会在每个十六进制的反斜杠后鼓励额外的 x0价值。 @Chetan 这只是我们人类的代表。实际的字符串值是相同的。大概你通过打印得到了那个表示?打印你的期望值,你会发现它看起来完全一样。 我同意你的观点,但如果你可以运行下面的代码并且它打印输出的方式是我想要的。 tio.run/##K6gsycjPM7YoKPr/… 所以12 变成了\x08?如何?我没有看到逻辑。

以上是关于如何在python中创建二维列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在raptor中创建一个长度为100的数组,数组内的元素数值为1,2,3,……,100,然后将

将字符串列表插入二维向量

C代码和python代码:用二维数组实现矩阵的转置

在python中,我应该如何使用函数将文件读入二维列表后,不要让二维列表为空

如何在 HDF5DotNet 中创建 2D H5Array

python如何通过列表转换为二维码?