繁体   English   中英

与另一个列表Python比较时从列表中删除/删除元素

[英]Deleting/Removing element from a list when comparing to another list 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)

@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()方法将iku_coins列表中删除

流行()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM