python - 有没有办法管理列表中的浮点数?
问题描述
我目前正在我的大学从事一个项目,在那里我可以获得有关患者心音的信息流。Arduino 客户端正在测量患者心脏的声音,并通过 LAN 将数据发送到我的服务器。服务器解码数字字符串并用它用 matplotlib 绘制图形。我的问题如下:
import socket
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import datetime
import sys
converter = lambda data: (data[0], data[1]/1023*5, data[2]/1000)
HOST = ''
PORT = 1236
address = (HOST, PORT)
fig, ax = plt.subplots()
plt.style.use('seaborn')
plt.tight_layout()
fig.show()
x, y = [], []
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((address))
s.listen(1)
conn, addr = s.accept()
with conn:
print(f"Connectet to Client {addr}")
try:
while True:
data = conn.recv(4096).decode("utf-8")
if data == "STOP":
break
else:
data_list = data.split(";")
for d in data_list:
data_point = d.split(",")
if len(data_point) > 3:
data_point = ''
else:
data_point_num = [float(i) for i in data_point]
print(type(data_point_num))
real_data = list(map(converter, data_point_num))
finally:
sys.exit()
如您所见,我正在尝试使用 lambda 表达式将声音电压转换为实际电压。但是,我收到了 float 不可下标的 Traceback 错误。有人可以帮助学生吗?
如果该split()
函数令人困惑,那是因为客户端发送了一个包含三个值的字符串,并打包在一个更大的字符串中。例子:
b'0,765,18273;0,721,18274;0,750,18275;....'
等等。
如果您对我的项目有具体的提示和技巧要说,那么请这样做,因为我是 Python 新手
解决方案
克里斯·多伊尔是对的。您正在使用函数转换器将浮点列表传递给“地图”。map 将遍历这个列表的每个元素,每个元素都是一个浮点数。但是,对于每个元素,函数转换器都会尝试对其下标,这就是您收到该错误的原因。我认为你的意思是这样的:
data_list = data.split(';')
updated_data_list = []
for d in data_list:
data_point = d.split(',')
if len(data_point) > 3:
data_point = ''
else:
data_point_num = [float(i) for i in data_point]
updated_data_list.append(data_point_num)
real_data = list(map(converter, updated_data_list))
在此代码中,“updated_data_list”是一个列表列表。这将通过调用 map 传递给函数转换器,map 会将函数转换器应用于“updated_data_list”中的每个列表。由于每个列表都是可下标的,这应该可以解决错误,我认为这是您最初打算实现的(尽管如果您的任何数据点少于三个部分,这仍然会导致问题)。
推荐阅读
- javascript - Html 列表未从 SQL 数据库更新
- javascript - 如何从对象中检索值以将其放入数组中
- python - 情节没有出现在 Pandas 中
- amazon-web-services - 需要从 EKS 上的多个 pod 访问的卷的最佳实践
- javascript - 从 React Native 成功上传图片到 Cloudinary 不返回 URL
- python - 创建累积列表 pandas
- php - 通过 PHP 通过 id 预填充表单输入,但在表单的 HTML 中不使用 echo
- java - 启动尤里卡服务器后如何将尤里卡服务器注册为客户端
- php - 如何比较 swtich 语句中的宽度和高度?
- ios - CAEmitterLayer在swift中的发射经纬度