替换列表列表中的字符串

时间:2012-12-08 20:51:37

标签: python list python-3.x replace nested-lists

我有一个字符串列表列表,如:

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)

但我无法让它适用于嵌套列表。有什么建议吗?

4 个答案:

答案 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']