与另一个列表Python

时间:2019-06-04 08:59:57

标签: python list

所以我有一个好人。我正在尝试从两个不同的交易所建立两个加密货币行情清单(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)

2 个答案:

答案 0 :(得分:2)

@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)

答案 1 :(得分:1)

如何将代码修改为:

while ku_coins:
    i = ku_coins.pop()
    if str(i[:-4] + 'BTC') in bin_coins:
        pass
    else:
        # do something

pop()方法将iku_coins列表中删除

pop()

相关问题