我有一个字符串列表列表,如:
example = [["string 1", "a\r\ntest string:"],["string 1", "test 2: another\r\ntest string"]]
我想用空格替换"\r\n"
(并删除所有字符串末尾的":"
)。
对于普通列表,我会使用list comprehension来删除或替换像
这样的项目example = [x.replace('\r\n','') for x in example]
甚至是lambda函数
map(lambda x: str.replace(x, '\r\n', ''),example)
但我无法让它适用于嵌套列表。有什么建议吗?
答案 0 :(得分:12)
好吧,想想你的原始代码在做什么:
example = [x.replace('\r\n','') for x in example]
您在列表的每个元素上使用.replace()
方法,就好像它是一个字符串一样。但是这个列表的每个元素都是另一个列表!您不想在子列表上调用.replace()
,您希望在其每个内容上调用它。
对于嵌套列表,请使用嵌套列表推导!
example = [["string 1", "a\r\ntest string:"],["string 1", "test 2: another\r\ntest string"]]
example = [[x.replace('\r\n','') for x in l] for l in example]
print example
[['string 1', 'atest string:'], ['string 1', 'test 2: anothertest string']]
答案 1 :(得分:3)
example = [[x.replace('\r\n','') for x in i] for i in example]
答案 2 :(得分:2)
如果您的列表比您给出的列表更复杂,例如,如果它们有三层嵌套,则以下内容将通过列表及其所有子列表替换\ r \ n用空格在它遇到的任何字符串中。
def replace_chars(s):
return s.replace('\r\n', ' ')
def recursively_apply(l, f):
for n, i in enumerate(l):
if type(i) is list:
l[n] = recursively_apply(l[n], f)
elif type(i) is str:
l[n] = f(i)
return l
example = [[["dsfasdf", "another\r\ntest extra embedded"],
"ans a \r\n string here"],
['another \r\nlist'], "and \r\n another string"]
print recursively_apply(example, replace_chars)
答案 3 :(得分:0)
以下示例在列表(子列表)列表之间进行迭代,以替换字符串,单词。
myoldlist=[['aa bbbbb'],['dd myword'],['aa myword']]
mynewlist=[]
for i in xrange(0,3,1):
mynewlist.append([x.replace('myword', 'new_word') for x in myoldlist[i]])
print mynewlist
# ['aa bbbbb'],['dd new_word'],['aa new_word']