Как генерировать значения x и y на основе ширины и высоты? - PullRequest
0 голосов
/ 21 января 2020

Мне нужно сгенерировать значения x и y на основе ширины и высоты. Здесь у меня есть список dicts, который выглядит следующим образом:

myInput = [{"height":3,"value":5},{"height":5,"value":1} and so on..]

Я перебираю этот dict для генерации значений x и y. Основываясь на ширине, я хочу сгенерировать х и на основе высоты, я хочу сгенерировать у. Я не использовал ширину в коде. Использование ширины для вычисления значения х. Здесь ширина равна 4, поэтому максимальное значение x равно 4. Я не знаю, как сделать это в коде. Помогите мне с некоторыми решениями.

Вот пример кода,

width = 4
myInput = [{"height":3,"value":5},{"height":5,"value":1}]
temp_d = {}
result = []
for i in myInput:
    print(i["height"])
    for j in range(i["height"]):
        temp_d["x"] = j
        temp_d["y"] = j
        temp_d["value"] = i["value"]
        result.append(temp_d)
        temp_d={}
print(result)

Мой вывод:

[{'x': 0, 'y': 0, 'value': 5}, 
{'x': 1, 'y': 1, 'value': 5}, 
{'x': 2, 'y': 2, 'value': 5}, 
{'x': 0, 'y': 0, 'value': 1}, 
{'x': 1, 'y': 1, 'value': 1}, 
{'x': 2, 'y': 2, 'value': 1}, 
{'x': 3, 'y': 3, 'value': 1}, 
{'x': 4, 'y': 4, 'value': 1}]

Требуемый вывод:

[
{'x': 0, 'y': 0, 'value': 5}, {'x': 0, 'y': 1, 'value': 5}, 
{'x': 0, 'y': 2, 'value': 5}, {'x': 0, 'y': 3, 'value': 5},
{'x': 1, 'y': 0, 'value': 5}, {'x': 1, 'y': 1, 'value': 5}, 
{'x': 1, 'y': 2, 'value': 5}, {'x': 1, 'y': 3, 'value': 5},
{'x': 2, 'y': 0, 'value': 5}, {'x': 2, 'y': 1, 'value': 5}, 
{'x': 2, 'y': 2, 'value': 5}, {'x': 2, 'y': 3, 'value': 5},
{'x': 3, 'y': 0, 'value': 5}, {'x': 3, 'y': 1, 'value': 5}, 
{'x': 3, 'y': 2, 'value': 5}, {'x': 3, 'y': 3, 'value': 5},
{'x': 4, 'y': 0, 'value': 5}, {'x': 4, 'y': 1, 'value': 5}, 
{'x': 4, 'y': 2, 'value': 5}, {'x': 4, 'y': 3, 'value': 5},

{'x': 0, 'y': 4, 'value': 1}, {'x': 0, 'y': 5, 'value': 1}, 
{'x': 1, 'y': 4, 'value': 1}, {'x': 1, 'y': 5, 'value': 1},
{'x': 2, 'y': 4, 'value': 1}, {'x': 2, 'y': 5, 'value': 1}, 
{'x': 3, 'y': 4, 'value': 1}, {'x': 3, 'y': 5, 'value': 1},
{'x': 4, 'y': 4, 'value': 1}, {'x': 4, 'y': 5, 'value': 1},

]

Ответы [ 2 ]

1 голос
/ 21 января 2020

Поскольку вы хотите, чтобы список содержал все три значения высоты и значения ширины, вам нужно l oop по всем этим параметрам, чтобы получить правильный результат, поскольку вы игнорировали ширину в своем коде, он генерирует значения, используя только высоту для и x и y, но вам нужны разные значения для x и y, которые я использовал как k для ширины и j для высоты. Кроме того, в ожидаемом выводе высота не сбрасывается в 0 для каждого элемента словаря в myInput, для него установлено предыдущее значение высоты + 1, поэтому я добавил переменную curr, чтобы отслеживать эту высоту.

def my_func():
    width = 4
    myInput = [{"height":3,"value":5},{"height":5,"value":1}]
    temp_d = {}
    result = []
    curr = 0
    for i in myInput:
        print(i["height"])
        for k in range(width+1):
            for j in range(curr,i["height"]+1):
                temp_d["x"] = k
                temp_d["y"] = j
                temp_d["value"] = i["value"]
                result.append(temp_d)
                temp_d={}
        curr = i["height"] + 1
    print(result
0 голосов
/ 21 января 2020

Вывод выглядит по-разному для обоих входов: {"высота": 3, "значение": 5}, {"высота": 5, "значение": 1}

для {"высота": 3, «значение»: 5}, похоже, что результат вычисляется после итерации по ширине и высоте

Для достижения этого вы можете попробовать следующее:

import itertools
for i in myInput:
    for p,q in itertools.product(range(width+1),range(i["height"]+1)):
        temp_d["x"] = p
        temp_d["y"] = q
        temp_d["value"] = i["value"]
        result.append(temp_d)
        temp_d={}
print(result)

Но вывод для {"height": 5, "value": 1} отличается от вывода {"height": 3, "value": 5}, и логика c, упомянутая выше, будет генерировать другой вывод. Не могли бы вы подробнее остановиться на этом вопросе, чтобы мы могли соответствующим образом изменить логи c?

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