简体   繁体   English

按列表索引重命名 python 列表中的项目

[英]Rename items on python list by list index

I have a list where I need to rename some items.我有一个列表,我需要重命名一些项目。 However, let's assume that I don't know the items exact names as they are being added to the list as variables (in this cases I don't know the calendar week number).但是,假设我不知道项目的确切名称,因为它们作为变量添加到列表中(在这种情况下,我不知道日历周数)。

myList = ['id', 'brandName', 'EngagedUsers_Week_47', 'EngagedUsers_Week_48', 'EngagedUsers_Week_49', 'EngagedUsers_Week_50', 'Week_47_VS_Week_48', 'Week_48_VS_Week_49', Week_49_VS_Week_50']

I need to convert the above list to:我需要将上面的列表转换为:

myNewList = ['id', 'name', 'Week47', 'Week48', 'Week49', 'Week50', '47VS48', '48VS49', '49VS50']

I tried the below, but it would only work if I know the exact list item name:我尝试了以下方法,但只有在我知道确切的列表项名称时才有效:

for item in myList:
   if (item != "Users_Week_48"):
        myNewList.append("Week48")
   else:
        myNewList.append(item)

How can I solve my problem?我该如何解决我的问题? Would this be something to do with going by list index and use regex?这与通过列表索引和使用正则表达式有关吗? Could someone help please (I have very little knowledge on how this could be achieved) thanks!有人可以帮忙吗(我对如何实现这一点知之甚少)谢谢!

Trying for something readable and manageable (and extensible if later needed):尝试一些可读和可管理的东西(如果以后需要可以扩展):

def convert(s):
    if s == 'brandName':
        return 'name'
    s = re.sub(r'EngagedUsers', '', s.replace('_', ''))
    s = re.sub(r'Week(\d+VS)Week(\d+)', r'\1\2', s)
    return s
[convert(s) for s in myList]

# out:
['id',
 'name',
 'Week47',
 'Week48',
 'Week49',
 'Week50',
 '47VS48',
 '48VS49',
 '49VS50']

Does this suffice?这够了吗?

myList = ['id', 'brandName', 'EngagedUsers_Week_47', 'EngagedUsers_Week_48', 'EngagedUsers_Week_49',
          'EngagedUsers_Week_50', 'Week_47_VS_Week_48', 'Week_48_VS_Week_49', 'Week_49_VS_Week_50']

myNewList = []
for item in myList:
    if item[:2] == 'id':
        myNewList.append(item)
    elif item == 'brandName':
        myNewList.append('name')
    elif item[:12] == 'EngagedUsers':
        myNewList.append(item[13:17]+item[-2:])
    elif item[:4] == 'Week':
        myNewList.append(item[5:7]+item[8:10]+item[-2:])

print(myNewList)
['id', 'name', 'Week47', 'Week48', 'Week49', 'Week50', '47VS48', '48VS49', '49VS50']

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM