我有一个这样的列表:
[`('__label__c091cb93-c737-4a67-95d7-49feecc6456c', 0.5), ('__label__96693d45-4dec-4b66-a2e2-621329d64b92', 0.498047)]`
我想这样替换元组元素字符串值:
'__ label__c091cb93-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方式和其他任何方式更新元组值来优化代码
答案 0 :(得分:1)
您是正确的,在Python中元组是不可变的,但列表不是。因此,您应该能够就地更新列表Cross River
。
此外,看起来您已经知道必须修改的元素的位置以及要删除的子字符串的位置,因此可以避免一个循环和l
函数,该循环将再次遍历您的字符串
replace
答案 1 :(得分:1)
您可以使用地图功能:
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)))