剥离列表中的字符串

时间:2015-09-01 05:41:21

标签: python list

我试图从字符串列表中的每个字符串的末尾删除字符。

我不明白的是,这不起作用:

def test():
    listymclist = ['bla bla bla\n', 'stuff\n', '80085\n']

    for entry in listymclist:
        entry.strip('\n')

    return listymclist

最终结果是listymclist未改变:['bla bla bla\n', 'stuff\n', '80085\n']

但如果我这样做:

def test():
    listymclist = ['bla bla bla\n', 'stuff\n', '80085\n']

    listymclist = [x.strip('\n') for x in listymclist]

    return listymclist

我以所需的剥离形式返回我的列表:['bla bla bla', 'stuff', '80085']

在第一个例子中,似乎我的for循环被完全忽略,好像对列表的更改没有被修改为listymclist。为什么这个额外的步骤listmclist = ... 是必要的,因为它是一个列表而不是像元组一样不可变的东西?

5 个答案:

答案 0 :(得分:3)

您的第一个循环不会改变listmyclist中的条目。您的操作会删除\n,但永远不会将值写回列表。

答案 1 :(得分:0)

for entry in listymclist:
    entry.strip('\n')

strip()方法调用返回带有剥离的字符串副本,它不会修改原始字符串。这是因为python字符串是不可变的。请看这个例子清楚:

str = "0000000this is string example....wow!!!0000000";
print str.strip( '0' )
print str

输出将是:

this is string example....wow!!!
0000000this is string example....wow!!!0000000

因此,在第一个示例中,您在字符串上调用strip(),但丢弃剥离的版本(不将其分配给任何内容),原始字符串保持不变。

但在第二个内部。

listymclist = [x.strip('\n') for x in listymclist]

您正在创建一个新的字符串列表,这些字符串是来自原始调用strip()的返回值。因此,这个新列表将包含剥离版本。最后,您将重新分配listymclist中的列表。所以,现在它将包含修改后的版本。

答案 2 :(得分:0)

这是因为函数str.strip()返回列表中字符串的副本,该副本未附加到列表'listymclist'。它返回一个副本,因为字符串是不可变的。

答案 3 :(得分:0)

strip方法不会更改原始字符串,而是返回字符串的副本。您可以将返回的值放在另一个列表中,然后返回该列表

def test():
    listymclist = ['bla bla bla\n', 'stuff\n', '80085\n']
    stripped_list = []
    for entry in listymclist:
        stripped_list.append(entry.strip('\n'))

    return stripped_list 

答案 4 :(得分:0)

python for x in alist语法通常比索引列表更可取,但并非总是如此。如果要修改列表的元素,则必须将它们编入索引以便分配给它们。所以:

for i in in range( len(listymclist)):
   listymclist[i] = listymclist[i].strip()

有些人可能更喜欢

for i, x in enumerate(listymclist):
   listymclist[i] = x.strip()