Удаление / Удаление элемента из списка при сравнении с другим списком Python - PullRequest
0 голосов
/ 04 июня 2019

Так что у меня есть хороший. Я пытаюсь построить два списка (ku_coins и bin_coins) криптографических тикеров из двух разных бирж, но я не хочу удваивать, поэтому, если он появляется на обеих биржах, я хочу удалить его из ku_coins.

Небольшое осложнение происходит, когда символы Kucoin появляются как AION-BTC, тогда как символы Binance входят как AIONBTC, но это не проблема.

Итак, во-первых, я создаю два списка символов, который работает нормально, без проблем. Затем я пытаюсь выполнить цикл по символам Kucoin и преобразовать их в символ стиля Binance, поэтому AIONBTC вместо AION-BTC. Затем, если он появится в списке Binance, я хочу удалить его из списка Kucoin. Однако, по-видимому, случайным образом отказывается удалять несколько символов, которые соответствуют требованию. Например AION.

Удаляет большинство удвоенных символов, но в случае AION, например, он просто не удаляет его.

Если я просто сделаю 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)

Ответы [ 2 ]

2 голосов
/ 04 июня 2019

@ 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 голос
/ 04 июня 2019

Как насчет изменения кода:

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

метод pop() удаляет i из списка ku_coins

pop ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...