繁体   English   中英

Python:追加/扩展方法

[英]Python: append/ extend method

有人可以解释一下为什么在 for 循环之后列表 res 是['m']吗?

string = 'spam'
for x in string:
    res =[]
    res.extend(x)
print(res)

我预计 output 是res = ['s', 'p', 'a', 'm']

您将在循环的每个步骤中替换列表 object 。 语句res = []创建一个新的空列表 object,然后在该列表中添加一个字母。

没有循环,这就是你正在做的事情:

>>> x = 's'
>>> res = []
>>> res.extend(x)
>>> res
['s']
>>> x = 'p'
>>> res = []
>>> res.extend(x)
['p']
>>> x = 'a'
>>> res = []
>>> res.extend(x)
>>> res
['a']
>>> res = []
>>> x = 'm'
>>> res.extend(x)
>>> res
['m']

在循环之外创建列表,一次

string = 'spam'
res = []
for x in string:
    res.extend(x)
print(res)

现在,您不必在for循环的每次迭代中都用一个新列表替换列表 object。

同样,删除循环并手动执行这些步骤,现在我们有:

>>> res = []
>>> x = 's'
>>> res.extend(x)
>>> res
['s']
>>> x = 'p'
>>> res.extend(x)
>>> res
['s', 'p']
>>> x = 'a'
>>> res.extend(x)
>>> res
['s', 'p', 'a']
>>> x = 'm'
>>> res.extend(x)
>>> res
['s', 'p', 'a', 'm']

并不是说您应该在这里使用res.extend() 它之所以有效,是因为分配给xstring中的各个字母也是字符串,甚至单字母字符串仍然是序列。 你真正用res.extend(x)做的事情相当于for element in x: res.append(element) ,但x总是只有一个元素。

所以这也可以:

string = 'spam'
res = []
for x in string:
    res.append(x)
print(res)

或者只是用整个string值扩展res

string = 'spam'
res = []
res.extend(string)
print(res)

或者,如果您只是想要一个字符串的所有字符的列表,只需使用list() function:

string = 'spam'
res = list(string)
print(res)

list()完全按照您想要对循环执行的操作:创建一个空列表,循环输入,并将每个元素添加到新列表中,然后返回:

>>> string = 'spam'
>>> list(string)
['s', 'p', 'a', 'm']

您永远不会得到 output 因为对于循环的每次迭代,您都在设置res = [] ,因此只有最后一次迭代可以通过使用'm'扩展空白列表来工作。

固定代码如下所示:

string = 'spam'
res = []
for x in string:
    res.extend(x)
print(res)

另一个注意事项是,在这种情况下,您可能应该使用.append .extend用于附加整个可迭代对象,但由于您一次只添加一个元素,因此没有必要。 在这里查看一个很好的解释。

最后要注意的是,在纯文本或代码编辑器之外编辑 python 代码时要小心。 您正在使用一些前导和尾随撇号''而不是常规''这会在某些时候给您带来麻烦。

您总是在 for 循环中重新初始化res列表,这就是为什么在循环的最后一次迭代中,列表被初始化为[]一个空列表并将最后一个字母添加到其中。

string = 'spam'
res =[]
for x in string:
    res.extend(x)
print(res)

或者为了简单起见,使用内置list ,它接受一个像字符串一样的可迭代并将其转换为列表object:

>>> list('spam')
['s', 'p', 'a', 'm']

您每次在循环内都重置 res 。 你需要使用这个-

string = ‘spam’
res =[]
for x in string:   
    res.extend(x)
print(res)

我认为这是最简单的方法:

string = 'spam'
res = list(string)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM