首页 > 解决方案 > Python 复制带有条件的子列表

问题描述

list_0 = []
list_1 = []


def sort_data():
    trades = client.get_recent_trades(symbol='BTCUSDT', limit=50)
    for t in trades:
        id_zero = [int(t["id"]), int(t["isBuyerMaker"]), float(t["quoteQty"]).__round__(2)]

        list_0.append(id_zero)

    dup = [x[0] for x in list_0]
    for x in dup:
        if x not in list_1:
            ?


while True:

    sort_data()

我已连接到 Binance 的 API,我想查看最近的交易。到目前为止,很好,我可以用client.get_recent_trades

我必须一次下载 50 笔交易,否则会太慢而且我会丢失大部分交易。我可以在特定的 ID 上看到它。

ID: 560, 565, 576, 587, ...例如对我没用,我失去了其他人。

在每个数据包中,只有少数“新鲜”数据。我不想将重复项附加到我的列表中,所以我尝试检查 ID 以过滤掉重复项

dup = [x[0] for x in list_0]

Example sublist: [234543234, 1, 4543.45]

我不知道如何执行以下操作:检查每个条目的list_0ID(ID 在 sublist 中的索引 0 上),当 ID 不在时list_1,将整个数据集/子列表 [ID, isBuyerMaker, quoteQty] 复制到list_1.

当它是一个“静态”例程时,我会知道该怎么做,但在这里我有一个每秒都有新数据的例程,我不知道如何处理它。我不能用迭代来做,[-1]因为它很慢。

标签: pythonlistlist-comprehensionbinance

解决方案


在这种情况下不要使用它,使用 websocket:

from binance.websockets import BinanceSocketManager
from binance.client import Client

client = Client('PUBLIC', 'PRIVATE')

lst = []

def process_message(msg):
    lst.append(msg)
    print (lst)

bm = BinanceSocketManager(client)
conn_key = bm.start_trade_socket('BNBBTC', process_message)
bm.start()

该列表lst将仅包含您的交易品种的唯一近期交易。将该列表写入文件并将其加载到您的制作订单脚本中。


推荐阅读