有没有办法管理列表中的浮点数?

时间:2019-12-25 17:47:56

标签: python python-3.x list lambda

我目前正在我大学的一个项目中工作,在那里我可以获得有关患者心音的信息流。 Arduino Client正在测量患者心脏的声音,并通过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的新手

2 个答案:

答案 0 :(得分:0)

克里斯·道尔(Chris Doyle)是对的。您正在使用函数转换器将浮点列表传递给“地图”。该映射将迭代此列表的每个元素,每个元素都是一个float。但是,对于每个元素,函数转换器都将尝试对其下标,这就是为什么您会收到该错误的原因。我认为您的意思是这样的:

dbms.connector.bolt.address=0.0.0.0:7687

在此代码中,“ updated_data_list”是列表的列表。这将通过调用map传递给函数转换器,该映射会将函数转换器应用于'updated_data_list'中的每个列表。由于每个列表都是可下标的,因此应该可以避免该错误,并且我认为这是您原本要实现的目标(尽管如果您的任何数据点少于三个部分,这仍然会造成问题)。

答案 1 :(得分:0)

Python映射接收一个列表,并使用提供的功能处理每个元素。

例如:

bundle install

正确执行代码。

# Return square of x 
def square(x): 
    return x**2 

numbers = [13, 21, 39, 24, 100]
result = map(square, numbers) 
print(list(result)) 

# same implementation using lambda
result = map(lambda x: x**2, numbers)
print(list(result))