Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将整数列表转换为字节数组_Python_List_Python 2.7_Python 3.x_Bytearray - Fatal编程技术网

在Python中将整数列表转换为字节数组

在Python中将整数列表转换为字节数组,python,list,python-2.7,python-3.x,bytearray,Python,List,Python 2.7,Python 3.x,Bytearray,我是Python的新手(C是我的主要语言),所以这可能是一个非常基本/幼稚的问题 我用以下Python代码生成了两个整数列表: mainList = range(100) random.shuffle(mainList) list1 = mainList[:len(mainList)/2] list2 = mainList[len(mainList)/2:] 基本上,我试图通过TCP连接发送这些列表(list1和list2),并且我想确保每个列表只发送50字节的有效负载(每个列表包含50个整数

我是Python的新手(C是我的主要语言),所以这可能是一个非常基本/幼稚的问题

我用以下Python代码生成了两个整数列表:

mainList = range(100)
random.shuffle(mainList)
list1 = mainList[:len(mainList)/2]
list2 = mainList[len(mainList)/2:]
基本上,我试图通过TCP连接发送这些列表(
list1
list2
),并且我想确保每个列表只发送50字节的有效负载(每个列表包含50个整数)


最好的方法是什么?
bytearray()
函数在这里是否适用

您可以使用以下方法。首先使用Python的模块将整数列表打包成二进制,每个整数使用4个字节。
I
指定所需的大小,因此如果整数只是字节值,则可以将其更改为
B

然后使用
zip
iter
一次从字节列表中获取50个字节。这意味着您可以将其设置为任意长度:

import random
import struct

main_list = range(100)
random.shuffle(main_list)

# 'I' meaning unsigned int of 4 bytes
bytes = struct.pack("{}I".format(len(main_list)), *main_list)

for send_50 in zip(*[iter(bytes)]*50):
    print len(send_50)

使用Python2.7测试

可能重复您的意思是将
int
压缩为一个字节?谢谢您的帮助,Ashwini!(谢谢你的帮助,罗罗——对不起,我直到现在才看到你的问题!)这是一个常见的成语吗?我花了几分钟才弄明白它是如何工作的,我想如果我在代码中遇到它,我会很困惑。很常见,它是基于
grouper
。谢谢!我甚至不知道那些itertools食谱;你每天都可以学到一些关于python的新知识。谢谢你,Martin!在Py文档中查找struct.pack()和zip()+iter()之前,您的回答为我提供了一个很好的入门知识。而且,你的方法比我想象的要简洁得多!我迫不及待地想随着语言的发展了解更多。再次感谢。