新手勿喷
1 2 3 |
|
self._i 中是多个列表[] [] [] 怎样合并成一个
1 2 3 4 5 6 7 |
|
这样解决的 !!!
怎样把结果赋值给 self._i
1 2 3 |
|
大家讲道理2017-04-17 18:03:28
如果你的意思是要合并多个 list 为一个,那使用 itertools.chain
来串接是最好的,以下是个简单的范例:itertools.chain
來串接是最好的,以下是個簡單的範例:
1 2 3 4 5 6 7 8 |
|
對於你的 case 而言:
1 2 |
|
以下題外話。
@松林 的方法是可行的,而且效能不會差,在 python 中 擴增(增強)運算 和 一般運算 的行為不見得完全一模一樣,在這裡我們使用 +
來討論。
我們看一個例子:
1 2 3 4 5 6 7 8 9 |
|
由本例可以發現,lst1 + lst2
會產生一個新的 list,但是 lst1 += lst2
則不會,因為對於擴增運算,Python 大部分 會依循以下規則:
不可變的型態會經由運算後產生一個新的 object,並且讓變數參考到該 object
可變的型態會採用 就地(in-place)運算 的方式來擴充或更新變數原本參考的 object
也就是說 lst1 += lst2
等價於 lst1.extend(lst2)
這取決於該型態是否有實作 __iadd__
(或 __imul__
...) 而不是只有實作 __add__
(或 __mul__
...)
對於沒有實作 __iXXX__
的型態,Python 會改呼叫 __XXX__
代替,這一定會運算出新的 object,但是 __iXXX__
則會就地更新原 object
也就是說 大部分 的:
不可變型態都不會實作 __iXXX__
,因為更新不可變型態的 object 是沒有道理的
可變型態會實作 __iXXX__
來就地更新
為什麼我一直強調大部分呢?
因為 CPython 中優化了 str
的擴增運算,str += other
rrreee
以下题外话。
@松林的方法是可行的,而且效能不会差,在python 中🎜扩增(增强)运算🎜 和🎜一般运算🎜 的行为不见得完全一模一样,在这里我们使用+
来讨论。 🎜
🎜我们看一个例子:🎜
rrreee
🎜由本例可以发现,lst1 + lst2
会产生一个新的list,但是lst1 += lst2
则不会,因为对于扩增运算,Python 🎜大部分🎜会依循以下规则:🎜
lst1 += lst2
等价于 lst1.extend(lst2)
🎜
🎜这取决于该型态是否有实作__iadd__
(或__imul__
...) 而不是只有实作__add__
(或__mul__
...)🎜
🎜对于没有实作__iXXX__
的型态,Python 会改呼叫__XXX__
代替,这一定会运算出新的object,但是__iXXX__
则会就地更新原object🎜
🎜也就是说 🎜大部分🎜 的:🎜
__iXXX__
,因为更新不可变型态的 object 是没有道理的🎜__iXXX__
来就地更新🎜str
的扩增运算,str += other
实在太常用了,在串接时,Python 并不会每次都复制字串🎜
🎜
🎜🎜我回答过的问题🎜: Python-QA🎜高洛峰2017-04-17 18:03:28
使用extend函数,比如:
1 2 3 4 5 6 7 |
|
PHP中文网2017-04-17 18:03:28
使用相加会直观一点,不过性能会差一点
1 2 3 4 |
|
ringa_lee2017-04-17 18:03:28
这样是不是更加Pythonic?
1 |
|