Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.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_String_List_Python 3.x_Serial Port - Fatal编程技术网

Python 如何将两个字符串转换为一个列表?

Python 如何将两个字符串转换为一个列表?,python,string,list,python-3.x,serial-port,Python,String,List,Python 3.x,Serial Port,我正在做一些串行通信的事情,当传输数据时,缓冲区经常被分成几个部分 我正在传输一个10个整数的列表,我有一个while循环来不断地读取串行数据。可能是这样的: b'' b'x[-' b'384,-368,-304,-96,0,-112,-352,256,304,640]' b'' b'' b'None' b'y[608,5' b'' b'60,432,-1120,-1568,272,432,64,192,256]' b'' b'' b'None' 产生此输出的循环是(ser是一个Serial对

我正在做一些串行通信的事情,当传输数据时,缓冲区经常被分成几个部分

我正在传输一个10个整数的列表,我有一个while循环来不断地读取串行数据。可能是这样的:

b''
b'x[-'
b'384,-368,-304,-96,0,-112,-352,256,304,640]'
b''
b''
b'None'
b'y[608,5'
b''
b'60,432,-1120,-1568,272,432,64,192,256]'
b''
b''
b'None'
产生此输出的循环是(
ser
是一个
Serial
对象):

列表之间的字符串数(我知道它们是字节,但无论如何)以及是
b”“
还是
b“None”
都是随机的

所以我的问题是如何生成两个列表,如:

[-384,-368,-304,-96,0,-112,-352,256,304,640]
[608,5,60,432,-1120,-1568,272,432,64,192,256]
根据上面的示例输入。我用嵌套的
if
s和正则表达式做了很多尝试,但都没有成功


非常感谢您的帮助。

也许您可以在读取字符串对象时保存读取的数据,当您检测到数组的最后一个字符时,例如
]
可以使用
拆分
或其他工具处理此字符串以提取您的数字

与第一种方法或示例类似,首先:

string = 'x[-384,-368,-304,-96,0,-112,-352,256,304,640]'
numbers = string.split(',')

numbers[0] = numbers[0][2:]
numbers[len(numbers)-1] = numbers[len(numbers)-1][:-1]

ns = [int(n) for n in numbers]
你将有:
[-384,-368,-304,-96,0,-112,-352,256,304,640]
也许您可以在读取字符串对象时保存读取的数据,当您检测到数组的结尾时,例如
]
可以使用
拆分
或其他工具处理此字符串以提取您的数字

与第一种方法或示例类似,首先:

string = 'x[-384,-368,-304,-96,0,-112,-352,256,304,640]'
numbers = string.split(',')

numbers[0] = numbers[0][2:]
numbers[len(numbers)-1] = numbers[len(numbers)-1][:-1]

ns = [int(n) for n in numbers]
你将有:
[-384,-368,-304,-96,0,-112,-352,256,304,640]
您可以使用
re.findall()
查找所有整数:

import re
while True:
    bytesToRead = ser.inWaiting()
    s = ser.read(bytesToRead)
    lst = re.findall(r'\-?\d+', s)
    if lst:
        print(lst)

您可以使用
re.findall()
查找所有整数:

import re
while True:
    bytesToRead = ser.inWaiting()
    s = ser.read(bytesToRead)
    lst = re.findall(r'\-?\d+', s)
    if lst:
        print(lst)

由于您处理的是字节而不是字符串(不同的数据类型),因此我建议您使用以下代码(类似于Kasramvd的解决方案,但略有更改):

测试:


由于您处理的是字节而不是字符串(不同的数据类型),因此我建议您使用以下代码(类似于Kasramvd的解决方案,但略有更改):

测试:


这很有用,但它仍然不能回答我的问题。如果列表在一行中,我知道怎么做。我要做的是从两个或更多的字符串构造一个列表。问题的核心是输入是不一致的,所以在很多点上可能会失败,我试图做的是一个对这些不一致具有鲁棒性的算法。这很有用,但它仍然不能回答我的问题。如果列表在一行中,我知道怎么做。我要做的是从两个或更多的字符串构造一个列表。问题的核心是输入是不一致的,所以在很多点上可能会失败,我想做的是一个对这些不一致有鲁棒性的算法。好吧,但是如果ex.x被分成两个字符串呢?现在我有了第二个列表,它没有任何符号表示它应该去哪里,我不知道是将它附加到x还是y。我的问题是如何将两个单独的字符串转换为一个列表。@JanekMuria…在这种情况下,使用更新的CodeOK中所示的
extend
方法创建一个通用列表来保存从
lst
捕获的所有整数,但是如果for ex.x被拆分为两个字符串呢?现在我有了第二个列表,它没有任何符号表示它应该去哪里,我不知道是将它附加到x还是y。我的问题是如何将两个单独的字符串转换为一个列表。@JanekMuria…在这种情况下,使用更新后的代码中所示的
extend
方法,创建一个常规列表来保存从
lst
捕获的所有整数
>>> list_of_integers = []
>>> s1 = b'384,-368,-304,-96,0,-112,-352,256,304,640]'
>>> lst = re.findall(b'\-?\d+', s1)
>>> if lst:
        list_of_integers.extend(lst)    


>>> list_of_integers
[b'384', b'-368', b'-304', b'-96', b'0', b'-112', b'-352', b'256', b'304', b'640']
>>> s2 = b'60,432,-1120,-1568,272,432,64,192,256]'
>>> lst = re.findall(b'\-?\d+', s2)
>>> if lst:
    list_of_integers.extend(lst)


>>> list_of_integers
[b'384', b'-368', b'-304', b'-96', b'0', b'-112', b'-352', b'256', b'304', b'640', b'60', b'432', b'-1120', b'-1568', b'272', b'432', b'64', b'192', b'256']
>>> 
>>> s3 = b'None'
>>> lst = re.findall(b'\-?\d+', s3)
>>> if lst:
        list_of_integers.extend(lst)


>>> list_of_integers
[b'384', b'-368', b'-304', b'-96', b'0', b'-112', b'-352', b'256', b'304', b'640', b'60', b'432', b'-1120', b'-1568', b'272', b'432', b'64', b'192', b'256']