簡體   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