сравнить элементы списка один за другим в python - PullRequest
0 голосов
/ 15 января 2019

поэтому я хочу написать простой код для сравнения элементов списка по одному.

Я определил простой список с элементами словаря и попробуйте следующее:

x = [{'price': 66, 'distance': 1}, {'price': 63, 'distance': 2} \
    , {'price': 64, 'distance': 3}, {'price': 75, 'distance': 5}, \
     {'price': 75, 'distance': 10}, {'price': 60, 'distance': 10}, \
     {'price': 50, 'distance': 10}, {'price': 55, 'distance': 13},\
     {'price': 63, 'distance': 2}]

def nested_skyline():
    y = x
    for i in x:
        for j in x:
            if i != j:
                if i == {'price': 55, 'distance': 10} and j == {'price': 55, 'distance': 13}:
                    print('this')
                if (i['price'] == j['price']) and (i['distance'] < j['distance']):
                    y.remove(j)
                elif (i['price'] < j['price']) and (i['distance'] <= j['distance']):
                    y.remove(j)

    return y

if __name__ == '__main__':
    print(nested_skyline())

но нет стадии с i = {'price': 55, 'distance': 10} и j = {'price': 55, 'distance': 13}, и результат моего кода:

[{'price': 66, 'distance': 1}, {'price': 63, 'distance': 2}, {'price': 60, 'distance': 10}, {'price': 50, 'distance': 10}, {'price': 55, 'distance': 13}, {'price': 63, 'distance': 2}]

Я ожидал увидеть «this» в результате и удалить, например, словарь {'price': 55, 'distance': 13}.

помогите мне, пожалуйста. спасибо.

1 Ответ

0 голосов
/ 15 января 2019

Похоже, вы знаете, что вам не следует манипулировать списком, через который вы перебираете, но вы пропустили одно очко:

y = x

Это просто делает y псевдонимом x, и любое изменение y также применяется к x.

Попробуйте y = x[:] или y = x.copy() или y = list(x), поэтому y становится копией x и может быть безопасно изменено в цикле.

...