我试图从字符串列表中的每个字符串的末尾删除字符。
我不明白的是,这不起作用:
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 = ...
是必要的,因为它是一个列表而不是像元组一样不可变的东西?
答案 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()