Python:追加/扩展方法

时间:2019-10-19 17:42:38

标签: python append

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

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

我希望输出为res = ['s', 'p', 'a', 'm']

5 个答案:

答案 0 :(得分:2)

您要替换列表对象循环的每一步。语句res = []创建一个新的空列表对象,然后向该列表添加一个字母。

没有循环,这是您正在做的:

>>> 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循环的每次迭代中都继续用新对象替换列表对象。

再次,删除循环并手动执行步骤,现在我们有了:

>>> 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();它之所以起作用,是因为string中分配给x的各个字母也都是字符串,甚至单字母字符串仍然是序列。您对res.extend(x)所做的工作实际上等同于for element in x: res.append(element),但是x将始终只有一个元素。

所以这也可以工作:

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

或仅将res扩展为整个string值:

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

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

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

list()确实可以完成循环操作:创建一个空列表,循环输入,然后将每个元素添加到新列表中,然后返回:

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

答案 1 :(得分:0)

您将永远不会获得该输出,因为对于循环的每次迭代,您都需要设置ls -lad,因此,通过使用res = []扩展空白列表,只有最后一次迭代才能起作用。

固定代码如下:

'm'

另一个注意事项是,在这种情况下,您可能应该使用string = 'spam' res = [] for x in string: res.extend(x) print(res) .append用于附加整个可迭代对象,但是由于您一次仅添加一个元素,因此没有必要。检查here以获得很好的解释。

这里的最后一点是,在纯文本或代码编辑器之外编辑python代码时要格外小心。您使用的是前导和尾部的撇号.extend而不是常规的‘’,这会在某些时候给您带来麻烦。

答案 2 :(得分:0)

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

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

或简单起见,请使用list内置函数,该函数将 iterable 像字符串一样,并将其转换为 列表 对象:

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

string = 'spam'
res = list(string)