我是编程和python的新手,试图找出如何打包列表并从中获取字符串值?并且还可以确定列表的大小应该是4字节 有人可以建议一种方法来做到这一点。
hello=[1,2,3,4]
由于
答案 0 :(得分:3)
参见Dor的一个解决方案的答案,更多用于从列表中创建字符串的解决方案是:
repr([1,2,3,4])
和
import pprint
pprint.pprint([1,2,3,4])
假设每个八位字节都存储为列表的元素。
这个将IP地址转换为字符串,如192.168.0.1
,并将其哈希。
hashlib.sha1(".".join([192,168,0,1])).hexdigest()
虽然这个将IP地址转换为压缩二进制格式,长度为4个字节,而散列 。
hashlib.sha1(struct.pack("!BBBB", *[192, 168, 1, 5])).hexdigest()
答案 1 :(得分:3)
获得规模:
from sys import getsizeof
getsizeof([1,2,3,4]) # 48 on my computer
对于容器来说,一般来说可能有点棘手。有关如何操作的信息,请参阅此代码段:
http://code.activestate.com/recipes/577504/
从列表中获取字符串有点不清楚,请尝试:
repr([1,2,3,4]) # "[1, 2, 3, 4]"
甚至
', '.join(str(i) for i in [1,2,3,4]) # "1, 2, 3, 4"
答案 2 :(得分:2)
str.join()需要一个字符串迭代器,所以你必须转换它
','.join(map(str, [1,2,3,4]))
或
','.join(str(i) for i in [1,2,3,4])
答案 3 :(得分:1)
假设您希望将一个列表(其长度已知为一个小常量,例如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]
打包未知长度的列表:
>>> pkd = ''.join(chr(i) for i in hello)
>>> pkd
'\x01\x02\x03\x04'
启封:
>>> [ord(c) for c in pkd]
[1, 2, 3, 4]
>>>
答案 4 :(得分:0)
您从中调用join()
的字符串是分隔符:
",".join([str(item) for item in [1,2,3,4]])
这会产生“1,2,3,4”。
列表理解是最明智的方法,in most cases the fastest。
关于列表的大小(以字节为单位) - 你真正想做的是在列表上使用len()
并检查它是4.显然,在Python中,int可以远大于一个字节,所以,如果需要,检查每个值是否适用0 => x => 255。