有人可以解释一下为什么在for循环之后,列表res是['m']
吗?
string = 'spam'
for x in string:
res =[]
res.extend(x)
print(res)
我希望输出为res = ['s', 'p', 'a', 'm']
答案 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)