python - 与另一个列表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)
推荐阅读
- r - 如何使用 ggplot 为每个带有“+”或“NA”值的标题着色?
- lua - Garry'sMod 检测两个玩家之间是否有墙
- linux - 使用 Windows ACL (Samba) 设置共享
- c# - 如何将属性添加到让用户从列表中选择的自定义组件
- python-3.x - 安装模块时 DLL 加载失败
- sql - Microsoft SQL Server - 限制用户访问单个视图
- java - 使用正则表达式检测字符串中的脚注标记
- visual-studio-code - 我可以在 settings.json 中全局设置环境变量吗?
- mysql - 错误执行任务 write() 参数必须是 str,而不是 bytes | MySQL 工作台
- ssh - ESXi SSH 会话退出终止正在运行的作业 - nohup 相同的结果