Разделить список на список? - PullRequest
0 голосов
/ 02 февраля 2020

Чтобы разделить каждый элемент списка на элемент в другом списке, в том же месте у меня есть следующий фрагмент кода:

def calc_cosine(up_part, down_part):
    cosines = list(map(truediv, up_part, down_part))
    return cosines

up_part:

[4.0, 4.0, 2.0, 5.0]

down_part :

[6.0, 8.94427190999916, 6.928203230275509, 7.348469228349535]

вывод:

[0.6666666666666666, 0.4472135954999579, 0.2886751345948129, 0.6804138174397716]

Однако, когда я использую эту функцию в приложении flask, она дает TypeError.

Кто-нибудь знает способ разделить каждый элемент списка на элемент второго списка, который находится в том же месте, только тогда с помощью for l oop?

Ответы [ 3 ]

2 голосов
/ 02 февраля 2020

Вы можете l oop по длине одного из списков (up_part в данном случае) и разделить их на соответствующее значение во втором списке:

def element_wise_division(up_part, down_part):
    output=[]
    for x in range(len(up_part)):
        output.append(up_part[x]/down_part[x])
    return output

Это не чрезмерно эффективен, но прост для чтения и отладки. Помните, что возникнет ошибка, если down_part короче, чем up_part.

0 голосов
/ 02 февраля 2020

Вы можете использовать понимание списка с zip:

def calc_cosine(up_part, down_part):
    return [u / d for u, d in zip(up_part, down_part)]
0 голосов
/ 02 февраля 2020

Вы можете использовать zip для сопряжения одинаковых индексов списков - для неравных списков длины непарный более длинный список будет отброшен (используйте itertools.zip_longest в этом case)

print(list(zip(up_part, down_part)))

напечатает

[(4.0, 6.0), (4.0, 8.94427190999916), (2.0, 6.928203230275509), (5.0, 7.348469228349535)]

Полный код:

from operator import truediv 

def calc_cosine(up_part, down_part):
    cosines=[]
    for data in zip(up_part, down_part):
        cosines.append(truediv(*data))
    return cosines

up_part = [4.0, 4.0, 2.0, 5.0]
down_part= [6.0, 8.94427190999916, 6.928203230275509, 7.348469228349535]

print(calc_cosine(up_part, down_part))

печатает:

[0.6666666666666666, 0.4472135954999579, 0.2886751345948129, 0.6804138174397716]

или в короткий:

from operator import truediv 

up_part = [4.0, 4.0, 2.0, 5.0]
down_part= [6.0, 8.94427190999916, 6.928203230275509, 7.348469228349535]

print([ truediv(*c) for c in zip(up_part, down_part)])
...