所以我有一个好人。我正在尝试从两个不同的交易所建立两个加密货币行情清单(ku_coins
和bin_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)
答案 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()
方法将i
从ku_coins
列表中删除