在
for magician in list_of_magicians:
magician = 'The great ' + magician
第一行迭代串中list_of_magicians
結合每一個依次名稱magician
。它確實不是創建字符串的副本。但是,下一行通過連接'The great '
與magician
字符串創建一個新字符串,然後=
將該新字符串綁定到名稱magician
,並且在該操作之後,該名稱不再引用列表項。
如果相反,我們可以做str_prepend('The great ', magician)
那麼你的技術會工作,但我們不能這樣做,因爲Python字符串是不可變的。但是這裏有一個使用列表列表的相關示例。而由於名單是可變的,我們可以通過修改u
改變列出a
:
a=[['a'], ['b'], ['c']]
for u in a:
u.append('z')
print(a)
輸出
[['a', 'z'], ['b', 'z'], ['c', 'z']]
這裏寫make_great
功能的一種方式。在Python中,通常優選直接在容器中的項目上進行迭代,而不是通過索引間接迭代。寫make_great
功能的簡單直接的方法是做到這一點:
def make_great(list_of_magicians):
new_list = []
for magician in list_of_magicians:
new_list.append('The great ' + magician)
return new_list
magician_names = ['Alice', 'Alex', 'Blake']
magician_names = make_great(magician_names)
print(magician_names)
輸出
['The great Alice', 'The great Alex', 'The great Blake']
這將替換原有的magician_names
列表以新的清單。如果我們要修改原來的列表對象,我們可以採用分片分配:
magician_names[:] = make_great(magician_names)
或者,我們可以做切片分配裏面make_great
,變異傳入的名單。 Python函數的常規做法是改變它們的參數以返回None
。
def make_great(list_of_magicians):
new_list = []
for magician in list_of_magicians:
new_list.append('The great ' + magician)
list_of_magicians[:] = new_list
magician_names = ['Alice', 'Alex', 'Blake']
make_great(magician_names)
print(magician_names)
或者,我們可以使用列表理解,這是更緊湊(稍微快)做幾乎同樣的事情,並且避免了new_list
名需要:
def make_great(list_of_magicians):
list_of_magicians[:] = [
'The great ' + magician for magician in list_of_magicians
]
'magician'不指向列表中的值,但是是副本。如果你想在列表中直接修改它,你需要索引它。 – FlipTack
您可能會發現這篇文章有用:[關於Python名稱和值的事實和神話](http://nedbatchelder.com/text/names.html),這是由SO老將Ned Batchelder編寫的。另請參閱[其他語言具有「變量」,Python具有「名稱」](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables)。 –
@FlipTack排序。但考慮:在a:u [0] + ='z''中將'a = [['a'],['b'],['c']]''修改'a'中的項目。 –