[英]Deleting/Removing element from a list when comparing to another list Python
所以我有一个好人。 我正在尝试从两个不同的交易所构建两个加密货币行情清单( 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)
@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)
如何将代码修改为:
while ku_coins:
i = ku_coins.pop()
if str(i[:-4] + 'BTC') in bin_coins:
pass
else:
# do something
pop()
方法将i
从ku_coins
列表中删除
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.