如何在python中将列表打包为字符串

如何在python中将列表打包为字符串,python,Python,我是编程新手,python试图找出如何打包列表并从中获取字符串值?还可以确定列表的大小,它应该是4字节 有人能建议一种方法吗 hello=[1,2,3,4] 谢谢。join需要字符串迭代器,所以您必须转换它 ','.join(map(str, [1,2,3,4])) 或 关于一种解决方案,请参见Dor的答案,更多用于从列表中生成字符串的解决方案有: repr([1,2,3,4]) 以及: 用SHA1散列IP地址 假设每个八位字节都存储为列表的一个元素 这个函数将IP地址转换为一

我是编程新手,python试图找出如何打包列表并从中获取字符串值?还可以确定列表的大小,它应该是4字节 有人能建议一种方法吗

      hello=[1,2,3,4]

谢谢。join需要字符串迭代器,所以您必须转换它

','.join(map(str, [1,2,3,4]))


关于一种解决方案,请参见Dor的答案,更多用于从列表中生成字符串的解决方案有:

repr([1,2,3,4])
以及:

用SHA1散列IP地址 假设每个八位字节都存储为列表的一个元素

这个函数将IP地址转换为一个字符串,如192.168.0.1,并对其进行散列

hashlib.sha1(".".join([192,168,0,1])).hexdigest()
这个函数将IP地址转换为压缩二进制格式,长度为4字节,并对其进行散列

hashlib.sha1(".".join([192,168,0,1])).hexdigest()
获取大小:

from sys import getsizeof
getsizeof([1,2,3,4]) # 48 on my computer
对于容器来说,一般来说可能有点棘手。请参考此代码段了解如何执行此操作:

从列表中获取字符串有点不清楚,请尝试:

repr([1,2,3,4]) # "[1, 2, 3, 4]"
甚至

', '.join(str(i) for i in [1,2,3,4]) # "1, 2, 3, 4"

其中,从中调用join的字符串是分隔符:

",".join([str(item) for item in [1,2,3,4]])
这将产生1,2,3,4

列表理解是实现这一点的最清晰的方法,并且


至于以字节为单位的列表大小,您真正想要做的是在列表上使用len,并检查它是否为4。显然,在Python中,int可以远远大于一个字节,因此,如果需要,请检查每个值是否应用0=>x=>255。

假设您要将一个长度已知为小常量(例如4)且元素都是小于256的无符号整数的列表打包为一个字符串,作为每个列表元素的一个字节:

包装:

>>> hello = [1, 2, 3, 4]
>>> import struct
>>> pkd = struct.pack("4B", *hello)
>>> pkd
'\x01\x02\x03\x04'
拆包:

>>> struct.unpack("4B", pkd)
(1, 2, 3, 4)
>>> list(struct.unpack(">4B", pkd))
[1, 2, 3, 4]
>>> [ord(c) for c in pkd]
[1, 2, 3, 4]
>>>
包装一份长度未知的清单:

>>> pkd = ''.join(chr(i) for i in hello)
>>> pkd
'\x01\x02\x03\x04'
拆包:

>>> struct.unpack("4B", pkd)
(1, 2, 3, 4)
>>> list(struct.unpack(">4B", pkd))
[1, 2, 3, 4]
>>> [ord(c) for c in pkd]
[1, 2, 3, 4]
>>>

map不像列表理解那样清晰,有时作为一个引用看起来更慢。在第二个例子中,它是列表理解还是生成器?我认为列表理解使用方括号,生成器使用paren,但这里两者都没有。@darkport这将是一个生成器表达式,普通括号是隐含的。它的功能与列表理解完全相同。考虑到作者的明显水平,以及他说应该是4字节的事实,我很确定他想到的是len,想象的是每个数字一个字节,而不是getsizeof。啊,你可能是对的。但不打算添加另一个编辑:您确定要以字节为单位的列表大小,而不是列表的基数吗?是的,我有IP地址IP=192168,0,1此整数应转换为字符串,然后我将使用该字符串值的hash sha1,因为hash不接受整数…hashlib.sha1..join[192168,0,1].hexdigest。但是列表并不是存储IP地址的理想方式……哦,如果您希望IP的SHA1以二进制格式显示,请尝试以下方法:hashlib.sha1struct.pack!BBBB,*[192168,1,5]。hexdigest。注意!在struct.pack的参数中,这意味着网络字节顺序。@cha0site:byte-order与只有一个字节的顺序无关。