根据某些条件从列表中删除重复值

时间:2018-11-15 03:51:40

标签: python list unique

我有以下变量列表

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*

有些变量,如带*的变量本质上是相同的变量,但取值的月份可以不同。 就像2月的roll_off是m2一样,3月是m3而4月是m4。 如果存在多个月份值,我只需要选择对应于m2的变量。 如果仅存在一个月的值,则仅选择该值。

对于年龄和收入等变量,由于没有与之关联的月份信息,因此我照原样选择它们。

所有这些选择的值将附加到变量的最终列表中。

有人可以帮我用python吗?

1 个答案:

答案 0 :(得分:1)

编辑: 我已经更新了该功能,以实现您在注释中指定的结果。

我使用的列表理解很长,因此我将快速概述将项目添加到输出时要进行的检查:

  1. 该变量包含一个数字,并且变量名中包含(“ _m” + month_number)
  2. 变量中没有数字(例如“年龄”)
  3. 没有其他具有不同月份的变量的例子

因此,运行下面的代码将为月份变量'2'输出以下内容:

# '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)

完整代码:

SpriteRenderable