Извлечение двух списков из нескольких списков с разным размером? - PullRequest
0 голосов
/ 25 июня 2019

С учетом следующих 4 списков:

   x_name=[’02-2014’,’03-2014’,’05-2014’,’01-2016’,’03-2016’]
   x_value=[5,7,10,5,8]

   z_name=[’02-2014’,’03-2014’,’04-2014’,’05-2014’,’07-2014’,’01-   
        2016’,’02-2016’,’03-2016’]
   z_value=[16,18,33,12,78,123,3,5]

Из этих 4 списков я хотел бы получить два списка, например, lst_name и lst_value. Внутренняя часть lst_name должна совпадать с z_name, но для lst_value, если они имеют одинаковые имена в (x_name и z_name), мы должны вычислить соотношение их соответствующих значений (в x_value и z_value ) например, 5/16, а имена в z_name, которых нет в x_name (например, «04 -2014», «02 -2016» и т. д.), должны быть присвоены 0 в списке lst_value. Поэтому желаемый список должен быть:

lst_name=[’02-2014’,’03-2014’,’04-2014’,’07-2014’,’05-
             2014’,’01-2016’,’02-2016’,’03-2016’]

Lst_value=[0.31,0.38,0,0.83,0,0.06,0,1.6]

Есть идеи, как эффективно справиться с этим?

1 Ответ

1 голос
/ 25 июня 2019

КОД

from __future__ import print_function


x_name = ['02-2014', '03-2014', '05-2014', '01-2016', '03-2016']
x_value = [5, 7, 10, 5, 8]

z_name = ['02-2014', '03-2014', '04-2014', '05-2014',
          '07-2014', '01-2016', '02-2016', '03-2016']
z_value = [16, 18, 33, 12, 78, 123, 3, 5]


Lst_value = []

if len(z_name) > len(x_name):
    lst_name = z_name
    other = x_name
else:
    lst_name = x_name
    other = z_name

for n, elem in enumerate(lst_name):
    if elem in other:
        m = other.index(elem)
        Lst_value.append(float(x_value[m])/z_value[n])

    else:
        Lst_value.append(0.0)

print(Lst_value)

OUTPUT

lst_name = ['02-2014', '03-2014', '04-2014', '05-2014', '07-2014', '01-2016', '02-2016', '03-2016']
Lst_value = [0.3125, 0.3888888888888889, 0.0, 0.8333333333333334, 0.0, 0.04065040650406504, 0.0, 1.6]
...