如何在while循环中替换列表旧元素?WebSocket单价格存储实现
解决WebSocket价格列表只保留最新元素的问题
嘿,我明白你的问题了!你现在通过Binance的WebSocket获取实时价格,每次收到消息都用append()把新价格加到res_array里,结果列表越变越长,但你其实只想保留最新的那一个价格,用新值替换旧值。这就给你几个简单的解决方案:
方案1:直接重新赋值列表(最直观)
既然你只需要一个元素,每次收到新价格时直接把列表设为只包含这个新值就行,旧的元素会自动被丢弃:
res_array = [] bm = None count = 0 # 假设你之前定义了count变量 def process_message(msg): global count, res_array, bm # 替换成仅包含最新价格的列表,而不是追加 res_array = [msg['c']] return res_array def initiate(): global bm client = Client(api_key="11111111", api_secret="22222222") bm = BinanceSocketManager(client) # 这里补充启动socket的代码,比如监听指定交易对的实时价格 # bm.start_symbol_ticker_socket(symbol="BTCUSDT", callback=process_message)
方案2:保持列表引用不变(适合其他地方依赖该列表对象的情况)
如果你的代码里还有其他地方引用了res_array这个列表对象,不想改变它的引用,就用索引替换第一个元素:
res_array = [] bm = None count = 0 def process_message(msg): global count, res_array, bm if not res_array: # 第一次收到消息时,先添加第一个元素 res_array.append(msg['c']) else: # 后续消息直接替换第一个元素 res_array[0] = msg['c'] return res_array def initiate(): global bm client = Client(api_key="11111111", api_secret="22222222") bm = BinanceSocketManager(client) # 启动socket监听
方案3:用单个变量代替列表(更高效)
其实你只需要存储一个价格值,根本没必要用列表,直接用单个变量会更简洁高效:
current_price = None # 用单个变量存储最新价格 bm = None count = 0 def process_message(msg): global count, current_price, bm current_price = msg['c'] return current_price def initiate(): global bm client = Client(api_key="11111111", api_secret="22222222") bm = BinanceSocketManager(client) # 启动socket监听
小提醒
注意global关键字的使用,确保函数内外的变量是同一个引用,避免出现变量隔离的问题。另外,记得在initiate()里补充启动WebSocket监听的代码,否则不会有消息进来哦~
内容的提问来源于stack exchange,提问作者VitaPepe
相关产品推荐
相关产品推荐

