代码之家  ›  专栏  ›  技术社区  ›  Jignasha Royala wearestarters we

更新元组字符串和如何优化代码

  •  1
  • Jignasha Royala wearestarters we  · 技术社区  · 6 年前

    我有一张这样的单子:

      [`('__label__c091cb93-c737-4a67-95d7-49feecc6456c', 0.5), ('__label__96693d45-4dec-4b66-a2e2-621329d64b92', 0.498047)]`
    

    '\uuu label_uuuC091CB93-c737-4a67-95d7-49feecc6456c'到'c091cb93-c737-4a67-95d7-49feecc6456c'

    我试试这个:

    l = [('__label__c091cb93-c737-4a67-95d7-49feecc6456c', 0.5), ('__label__96693d45-4dec-4b66-a2e2-621329d64b92', 0.498047)]
    j = []
    for x in l:
        for y in x:
            if type(y) == str:
                z = y.replace('__label__',"")
    
    
    
        j.append((z, x[1]))
    
    
    
    print(j)
    

    [('c091cb93-c737-4a67-95d7-49feecc6456c', 0.5), ('96693d45-4dec-4b66-a2e2-621329d64b92', 0.498047)]
    

    如何用pythonic方法优化我的代码,以及用任何其他方法更新元组值,因为元组是不可变的

    2 回复  |  直到 6 年前
        1
  •  1
  •   gogaz    6 年前

    你说得对,元组在Python中是不可变的,但是列表不是。所以你应该可以更新列表 l 而且,看起来您已经知道必须修改的元素的位置和要删除的子字符串的位置,因此可以避免一个循环和 replace 函数,它将在字符串上再次迭代。

    for i in range(len(l)):
        the_tuple = l[i]
        if isinstance(the_tuple[0], str) and the_tuple[0].startswith('__label__'):
            l[i] = (the_tuple[0][len('__label__'):], the_tuple[1])
            # you can also replace "len('__label__')" by "8" to increase performances
            # but I think Python already optimizes it
    
        2
  •  1
  •   Rafał    6 年前

    data = [('__label__c091cb93-c737-4a67-95d7-49feecc6456c', 0.5), ('__label__96693d45-4dec-4b66-a2e2-621329d64b92', 0.498047)]
    def f(row): return row[0].replace('__label__', ''), row[1]
    print(list(map(f, data)))