Математические операции со списком кортежей, содержащих целые числа и числа с плавающей точкой - PullRequest
0 голосов
/ 12 января 2019

Это продолжение моего предыдущего вопроса, в котором я забыл одну часть своей проблемы. У меня есть функция ниже, которая направлена ​​на добавление элементов из одного списка в другой, пока список не будет только 0. Функция работает как задумано и, возможно, может использовать некоторые оптимизации, но я попробую это позже.

Моя текущая проблема заключается в том, что я должен каким-то образом поддерживать функцию работающей, но вместо вычисления значений с числами с плавающей запятой в списке, мне нужно делать это с числами с плавающей запятой в кортежах списков. Для некоторой справочной информации int в кортеже - это processID (этот код будет выполняться в многопроцессорном проекте), а второе значение - это простой тип с плавающей запятой, вычисляемый из различных функций.

В качестве примера списки должны выглядеть примерно так:

example_list = [(12345, -0.561432), (23456, -0.861423)]

Вот функция в качестве рабочего кода с примерами списков, содержащих только числа с плавающей запятой (не те кортежи, которые мне нужны).

def cancelOut(deficit_list, trade_1_list, trade_2_list):

    lengths = [len(deficit_list), len(trade_1_list), len(trade_2_list)]
    # List of the lists of positive values
    positive_lists = [trade_1_list, trade_2_list]

    if(len(deficit_list) != 0): # Check deficit_list isn't empty

        total_positive = lengths[1] + lengths[2]
        current_positive = 0

        # Set all indexes to 0 to start
        deficit_list_index = 0
        trade_index = 0
        trade_lists_index = 0

        # While new_deficit_list contains a value different from 0 do the following
        while not all(value == 0 for value in deficit_list):
            # Determine the difference between the current deficit_list value and current positive value of the current list
            value = deficit_list[deficit_list_index] + positive_lists[trade_lists_index][trade_index]
            if(value > 0):
                positive_lists[trade_lists_index][trade_index] = value
                deficit_list[deficit_list_index] = 0
                deficit_list_index += 1
            elif(value == 0):
                deficit_list[deficit_list_index] = 0
                positive_lists[trade_lists_index][trade_index] = 0
                deficit_list_index += 1
                trade_index += 1
                current_positive += 1
            elif(value < 0):
                deficit_list[deficit_list_index] = value
                positive_lists[trade_lists_index][trade_index] = 0
                current_positive += 1
                if(trade_index == (lengths[trade_lists_index + 1] - 1)):
                    trade_index = 0
                    trade_lists_index = 1
                else:
                    trade_index += 1

            if(trade_lists_index == 1 and current_positive == total_positive):
                break

    return [deficit_list, trade_1_list, trade_2_list]

if __name__ == "__main__":
    deficit_list_values = [-0.246497, -0.341068]
    positive_values_1 = [0.022148, 0.212573, 0.100531]
    positive_values_2 = [0.281474]
    lists = cancelOut(deficit_list_values, positive_values_1, positive_values_2)
    for i in range(len(lists)):
        print(lists[i])

Я чувствую, что проблема, с которой я сталкиваюсь, заключается в том, что кортежи содержат числа с плавающей запятой и целые числа.

1 Ответ

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

Используйте следующую команду (нативно для Python 3)

list1, list2 = map(list, zip(*list_of_tuples))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...