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

2024-06-09 13:50:14 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个好的。我正试图从两个不同的交易所建立两个加密代码列表(ku_coinsbin_coins),但我不想重复,所以如果它出现在两个交易所上,我想从ku_coins中删除它

当Kucoin符号以AION-BTC的形式出现,而Binance符号以AIONBTC的形式出现时,会出现一点复杂的情况,但这没有问题

首先,我创建了两个符号列表,运行良好,没有问题。然后我尝试通过Kucoin符号循环,并将它们转换为二进制样式的符号,因此AIONBTC而不是AION-BTC。如果它出现在二进制列表中,我想把它从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)

Tags: in列表forifbin符号symbolrequests
2条回答

将代码修改为:

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

pop()方法从ku_coins列表中删除i

pop()

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

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)

相关问题 更多 >