Как проверить, что переменная имеет то же значение и вернуть его как одно значение в Python - PullRequest
0 голосов
/ 14 октября 2019

У меня есть четыре переменные с определенной функцией.

def xyz():
    a_1 = self.bal.getcod1()
    a_2 = self.bal.getcod2()
    a_3 = self.bal.getcod3()
    a_4 = self.bal.getcod4()
    i =  getx(a_1)
    j =  getx(a_2)
    k =  getx(a_3)
    l =  getx(a_4)

    x = gety(a_1, i)
    y = gety(a_2,j)
    z = gety(a_3, k)
    w = gety(a_4,l)


    val = x*y*z*w
    return val

Например:

На основе возвращаемого значения getcod() я получаю 2,3,2,3 как a_1,a_2,a_3,a_4 соответственно.

Я не хочу, чтобы дубликаты передавались в четыре переменные i,j,k,l Я хочу, чтобы 2,3 передавал только один раз в две переменные из четырех переменных, а остальные ничего не должны делать.

Еслиу меня есть все 4,4,4,4, тогда только один раз мне нужно передать его одной переменной из четырех, а остальные ничего не должны делать.

Если у меня есть все 1,1,1,4, тогда мне нужно только 1,4 дляпередайте его двум переменным из четырех переменных, а остальные ничего не должны делать.

, чтобы я мог избежать возврата дублированных умноженных данных в переменную 'Val'.

Ответы [ 3 ]

1 голос
/ 14 октября 2019

на основе ответа выше, другой метод:

from functools import reduce

и затем добавьте это к вашему def xyz():

val = reduce((lambda x, y: x * y),list({w,x,y,z}))
1 голос
/ 14 октября 2019

import numpy as np

Если вы хотите сохранить структуру своего кода, вы можете сделать:

def getx(var):
    return var+10 #Example function

def gety(var1, var2):
    return var1+var2 #Example function #2
def xyz():

    a_1 = 2 #Replace with your function
    a_2 = 3
    a_3 = 2
    a_4 = 3
    i =  getx(a_1)
    j =  getx(a_2)
    k =  getx(a_3)
    l =  getx(a_4)

    w =  gety(a_1, i)
    x =  gety(a_2, j)
    y =  gety(a_3, k)
    z =  gety(a_4, l)

    val = np.prod(list({w,x,y,z}))
    return val

Объяснение:

w,x,y,z будет14,16,14,16 соответственно. Вы превращаете это в набор, используя {w,x,y,z}, так что вы получаете только один из каждого элемента, получая 14,16. Затем вы превращаете это в список, а затем умножаете каждый элемент списка, используя np.prod().

Вывод:

224   # That is, 14*16.
0 голосов
/ 14 октября 2019

Хитрость заключается в том, чтобы использовать set для удаления дубликатов, но тогда вы не будете знать, сколько элементов вы получили в результате, поэтому используйте это для решения вашей проблемы:

result = reduce((lambda x, y: x * y), list(set([getx(a_1), getx(a_2), getx(a_3), getx(a_4)])))

Работаобразец:

from functools import reduce

def getx(x):
    return x

def xyz():
    a_1 = 2
    a_2 = 3
    a_3 = 2
    a_4 = 3

    return reduce((lambda x, y: x * y), list(set([getx(a_1), getx(a_2), getx(a_3), getx(a_4)])))


print(xyz())

возвращает: 6

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