我正在尝试格式化一些数据以执行分析。我正在尝试从以1开头的所有字符串中删除'*'
。这是一个数据片段:
[['Version', 'age', 'language', 'Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6', 'Q7', 'Q8', 'Q9', 'Q10', 'Q11', 'Q12', 'Q13', 'Q14', 'Q15', 'Q16', 'Q17', 'Q18', 'Q19', 'Q20', 'Q21', 'Q22', 'Q23', 'Q24', 'Q25', 'Q26', 'Q27', 'Q28', 'Q29', 'Q30', 'Q31', 'Q32', 'Q33', 'Q34', 'Q35', 'Q36', 'Q37', 'Q38', 'Q39', 'Q40', 'Q41', 'Q42', 'Q43', 'Q44', 'Q45'], ['1', '18 to 40', 'English', '*distort', '*transfer', '*retain', 'constrict', '*secure', '*excite', '*cancel', '*hinder', '*overstate', 'channel', '*diminish', '*abolish', '*comprehend', '*tolerate', '*conduct', '*destroy', '*foster', 'direct', '*challenge', 'forego', '*cause', '*reduce', 'interrupt', '*enhance', '*misapply', '*exhaust', '*extinguish', '*assimilate', 'believe', 'harmonize', '*demolish', 'affirm', 'trouble', 'discuss', '*force', 'divide', '*remove', '*release', 'highlight', 'reinforce', 'stifle', '*compromise', '*experience', 'evaluate', 'replenish']]
这应该很简单,但我没有尝试过。例如:
for lst in testList:
for item in lst:
item.replace('*', '')
只是给了我相同的字符串。我也尝试插入一个if语句并索引字符串中的字符。我知道我可以访问字符串。例如,如果我说if item[0] == '*': print item
它会打印正确的项目。
答案 0 :(得分:7)
string
是不可变的,因此item.replace('*','')
返回带有替换字符的字符串,它不会替换它们(它不能,因为string
是不可变的)。您可以枚举列表,然后将返回的字符串分配回列表 -
示例 -
for lst in testList:
for j, item in enumerate(lst):
lst[j] = item.replace('*', '')
您也可以使用列表理解轻松完成此操作 -
testList = [[item.replace('*', '') for item in lst] for lst in testList]
答案 1 :(得分:2)
您可以尝试使用枚举,以便在时机成熟时访问列表元素的索引,并且您需要更改它:
for lst in testList:
for i, item in enumerate(lst):
if item.startswith('*'):
lst[i] = item[1:] # Or lst[i] = item.replace('*', '') for more
答案 2 :(得分:0)
您必须创建一个新的list
(如下所示)或访问旧的索引。
new_list = [[item.replace('*','') if item[0]=='*' else item for item in l] for l in old_list]
答案 3 :(得分:0)
y = []
for lst in testList:
for a in lst:
z = a.replace('*','')
y.append(z)
testList = []
testList.append(y)
print testList
答案 4 :(得分:0)
在您的代码中,您只替换虚拟变量中的*
而不影响列表条目。使用lstrip
只会从字符串左边的*
开始。
for x in xrange(len(testList)):
testList[x] = testList[x].lstrip('*')