Удалить повторяющиеся значения из списка на основе определенных условий - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть список переменных, как показано ниже

roll_off_m4**
ov_offer_desc_m4
curr_ov_tier_desc2_m4
income
age
vid_offer_up_flag_m3
vidpromo_rng_m4*
ovpromo_rng_m4*
ovpromo_rng_m3*
roll_off_m3
roll_off_m2
oolpromo_rng_m3*
ov_offer_group_v2_desc_m4
oolpromo_rng_m2*
rsdvr_orig_m2
vidpromo_rng_m2*
ovpromo_rng_m2*

Некоторые, например, отмеченные *, по сути, являются одной и той же переменной, но месяц, в котором берется ее значение, может отличаться.Например, roll_off в феврале - м2, в марте - м3, а в апреле - м4.Мне нужно выбрать только переменную, соответствующую m2, если присутствуют значения за несколько месяцев.Если присутствует значение только за один месяц, я выбираю только это.

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

Все эти выбранные значения добавляются в окончательный список переменных.

Может кто-нибудь помочь мне сделать это в python?

1 Ответ

0 голосов
/ 15 ноября 2018

РЕДАКТИРОВАТЬ: Я обновил функцию для достижения результатов, которые вы указали в комментариях.

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

  1. Переменная содержит число, а ("_m" + номер_месяца) находится в имени переменной
  2. В переменной нет номера(например, 'age')
  3. Нет другого примера этой переменной с другим месяцем

Таким образом, выполнение кода ниже выведет следующее для переменной месяца '2':

['roll_off_m4**', 'ov_offer_desc_m4', 'curr_ov_tier_desc2_m4', 'income', 'age', 'vid_offer_up_flag_m3', 'roll_off_m2', 'ov_offer_group_v2_desc_m4', 'oolpromo_rng_m2*', 'rsdvr_orig_m2', 'vidpromo_rng_m2*', 'ovpromo_rng_m2*']

Полный код:

# 're' is imported for determining if the month number is in the variable
import re

# Your initial list of variables
my_list =   ['roll_off_m4**',
             'ov_offer_desc_m4',
             'curr_ov_tier_desc2_m4',
             'income',
             'age',
             'vid_offer_up_flag_m3',
             'vidpromo_rng_m4*',
             'ovpromo_rng_m4*',
             'ovpromo_rng_m3*',
             'roll_off_m3',
             'roll_off_m2',
             'oolpromo_rng_m3*',
             'ov_offer_group_v2_desc_m4',
             'oolpromo_rng_m2*',
             'rsdvr_orig_m2',
             'vidpromo_rng_m2*',
             'ovpromo_rng_m2*']

# This function will return the list for the month specified
def get_data_for_month(month_number, variable_list):
    return [variable for variable in variable_list if (bool(re.search(r'\d', variable)) == True and ("_m" + str(month_number)) in variable) or (bool(re.search(r'\d', variable)) == False) or (variable.replace(variable[variable.find("_m"):variable.find("_m")+3], "_m2")) not in variable_list]


#function call
output = get_data_for_month(2, my_list)

#output is printed
print(output)
...