相关文章推荐
勤奋的鸭蛋  ·  python - Set up of ...·  2 天前    · 
风度翩翩的麦片  ·  Plugin to set scale ...·  2 天前    · 
大力的长颈鹿  ·  python - Conda env ...·  2 天前    · 
好帅的大熊猫  ·  14.04 - Fatal Python ...·  2 天前    · 
难过的春卷  ·  SQL Developer | Oracle 中国·  1 年前    · 
狂野的啄木鸟  ·  IAsyncResult.AsyncWait ...·  2 年前    · 
越狱的凉面  ·  CSP ...·  2 年前    · 

通过列表索引重命名python列表上的项目

0 人关注

我有一个列表,我需要重命名一些项目。然而,让我们假设我不知道这些项目的确切名称,因为它们是作为变量被添加到列表中的(在这种情况下,我不知道日历周数)。

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 = ['id', 'name', 'Week47', 'Week48', 'Week49', 'Week50', '47VS48', '48VS49', '49VS50']

我尝试了下面的方法,但只有当我知道确切的列表项目名称时,它才会工作。

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

我怎样才能解决我的问题?这是否与按照列表索引和使用重码有关?谁能帮帮我(我对如何实现这一目标知之甚少),谢谢!

2 个评论
你能不能多解释一下你想应用的转换规则?这不是很清楚。
我想是时候读一读关于正则表达式的教程了;这将是这里要走的路。
python
list
Baobab1988
Baobab1988
发布于 2020-12-09
2 个回答
Pierre D
Pierre D
发布于 2020-12-09
已采纳
0 人赞同

试图寻找一些可读和可管理的东西(如果以后需要,还可以扩展)。

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']
    
我认为这是一个不错的解决方案。额外的一点。我们也可以在这里使用函数式方法,使用 map(convert, myList) list(map(convert, myList)) 。可能会更快/更易读,这取决于问题。
@user8408080: Well, I'm in 吉多的营地 在这一点上。 相信我,我喜欢用精心设计的分布式map-reduce代码来处理大规模的问题(PB级),在我的生活中,有几年(十多年前)试图用map-reduce来表达任何问题都成了一种运动。 但是,当涉及到可读性时,仍然很难否认列表理解的优越性。
好吧,谢谢你的有趣的博文 :D 我认为这更像是个人/公司的偏好。对于这样简单的事情,我最常使用 map ,因为 for me 它更有可读性,但Guido确实提出了一个观点,即事情可能变得太复杂。我在这个问题上还没有决定 :D
sai
sai
发布于 2020-12-09
0 人赞同

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:])