根据特定条件从列表中删除重复值

2024-05-14 22:58:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个变量列表如下

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月的滚动是m2,3月是m3,4月是m4。 如果存在多个月的值,我只需要选择m2对应的变量。 如果只有一个月的值存在,我只选择它。你知道吗

对于年龄和收入等变量,由于没有与之相关的月份信息,所以我只按原样选择它们。你知道吗

所有这些选取的值都会附加到最终的变量列表中。你知道吗

有人能帮我用python做这个吗?你知道吗


Tags: 列表descm3ovrollofferrngoff
1条回答
网友
1楼 · 发布于 2024-05-14 22:58:41

编辑: 我已经更新了函数以实现您在注释中指定的结果。你知道吗

我使用了一个相当长的列表理解,因此我将快速概述要检查的内容,以便将该项添加到输出中:

  1. 变量包含一个数字,变量名中有(“\m”+month\u number)
  2. 变量中没有数字(例如“age”)
  3. 没有其他具有不同月份的变量示例

因此,运行下面的代码将为month变量“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)

相关问题 更多 >

    热门问题