【问题标题】:python renaming list element based on another listpython根据另一个列表重命名列表元素
【发布时间】:2021-03-08 12:15:08
【问题描述】:

我有两个列表如下

A=['a','b','c']

B=['0_txt1','0_txt2','1_txt1','1_txt2','2_txt1','2_txt2']

我应该用 A 中的相应列表元素重命名 B 元素中的前缀编号,因此所需的输出是:

B=['a_txt1','a_txt2','b_txt1','b_txt2','c_txt1','c_txt2']

如何通过读取和替换元素来做到这一点?谢谢!

【问题讨论】:

  • 你能告诉我们你尝试了什么吗?

标签: python list rename re


【解决方案1】:

这是一个简单的循环,它将检查 A 的索引是否与 B 中项目的前导数字匹配,然后相应地替换数字

C = []

for string in B:
    for x in A:
        if string.startswith(str(A.index(x))):
            C.append(string.replace(str(A.index(x)), x, 1))

【讨论】:

    【解决方案2】:

    使用列表推导:

    B = [x.replace(x.split("_")[0],  A[int(x.split("_")[0])], 1) for x in B]
    

    或使用海象运算符(Python 3.8+)避免重复计算 x.split("_")[0]

    B = [x.replace((p:=x.split("_")[0]),  A[int(p)], 1) for x in B]
    

    【讨论】:

    • 对海象运算符也非常好。我们也可以在替换命令中删除 ,1 对吧?
    • @physiker--1 用于防止将“172.16.254.1”(IP 地址)等字符串视为数字。
    【解决方案3】:

    尝试使用格式字符串、枚举和压缩的列表推导

    A=['a','b','c']
    
    B=['0_txt1','0_txt2','1_txt1','1_txt2','2_txt1','2_txt2']
    
    C = [f"{z}_{x.split('_')[1]}" for x in B for y,z in enumerate(A) if x.split('_')[0] == str(y)]
    
    print(C)
    

    【讨论】:

      猜你喜欢
      • 2018-07-14
      • 2018-08-19
      • 1970-01-01
      • 2022-01-17
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 2016-03-21
      相关资源
      最近更新 更多