首页 > 解决方案 > 与另一个列表Python比较时从列表中删除/删除元素

问题描述

所以我有一个很好的。我正在尝试从两个不同的交易所建立两个加密代码列表(ku_coinsbin_coins),但我不想加倍,所以如果它出现在两个交易所上,我想从ku_coins.

Kucoin 符号为AION-BTC,而 Binance 符号为 时,会出现轻微的复杂情况AIONBTC,但这没问题。

所以首先,我创建了两个符号列表,它们运行良好,没问题。然后我尝试做的是循环遍历 Kucoin 符号并将它们转换为 Binance 样式符号,AIONBTC而不是AION-BTC. 然后,如果它出现在 Binance 列表中,我想将其从 Kucoin 列表中删除。但是,它似乎随机拒绝删除少数符合要求的符号。例如AION.

它删除了大多数加倍符号,但在 AIONs 的情况下,例如它不会删除它。

如果我只是print(i)在这个循环之后做:

for i in ku_coins:
    if str(i[:-4] + 'BTC') in bin_coins:

它会很高兴地打印AION-BTC为符号之一,因为它完全符合要求。但是,当我ku_coins.remove(i)在打印之前将命令插入时,它突然决定不打印 AION 表明它不符合要求。它正在使我陷入困境。显然是remove命令导致了问题,但我终其一生都无法弄清楚原因。任何帮助都非常感谢。

import requests
import json

ku_dict = json.loads(requests.get('https://api.kucoin.com/api/v1/market/allTickers').text)
ku_syms = ku_dict['data']['ticker']
ku_coins = []
for x in range(0, len(ku_syms)):
    if ku_syms[x]['symbol'][-3:] == 'BTC':
        ku_coins.append(ku_syms[x]['symbol'])

bin_syms = json.loads(requests.get('https://www.binance.com/api/v3/ticker/bookTicker').text)
bin_coins = []
for i in bin_syms:
    if i['symbol'][-3:] == 'BTC':
        bin_coins.append(i['symbol'])

ku_coins.sort()
bin_coins.sort()

for i in ku_coins:
    if str(i[:-4] + 'BTC') in bin_coins:
        ku_coins.remove(i)

标签: pythonlist

解决方案


@top bantz,@Fourier 已经提到你不应该修改你正在迭代的列表。在这种情况下,您可以做的是首先创建一个副本,ku_coins然后对其进行迭代,然后从与您的条件ku_coins匹配的原始元素中删除该元素。if见下文:

ku_coins.sort()
bin_coins.sort()

# Create a copy 
ku_coins_ = ku_coins[:]

# Then iterate over that copy
for i in ku_coins_:
   if str(i[:-4] + 'BTC') in bin_coins:
       ku_coins.remove(i)


推荐阅读