[英]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()
; 它之所以有效,是因為分配給x
的string
中的各個字母也是字符串,甚至單字母字符串仍然是序列。 你真正用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.