搜索

首页  >  问答  >  正文

python 列表问题 ?

新手勿喷

1

2

3

<code>for i in  open (v):

    _temp = i.split('-')

    self._i= gen.gen(_temp[0], _temp[1])</code>

self._i 中是多个列表[] [] [] 怎样合并成一个


1

2

3

4

5

6

7

<code>cc = []

for i in  open (v):

    _temp = i.split('-')

    self= gen.gen(_temp[0], _temp[1])

    for bbc in  self:

        cc.append(i)

</code>

这样解决的 !!!

怎样把结果赋值给 self._i

1

2

3

<code> self._i = cc

    print 出来是空白

</code>

大家讲道理大家讲道理2892 天前397

全部回复(4)我来回复

  • 大家讲道理

    大家讲道理2017-04-17 18:03:28

    如果你的意思是要合并多个 list 为一个,那使用 itertools.chain 来串接是最好的,以下是个简单的范例:itertools.chain 來串接是最好的,以下是個簡單的範例:

    1

    2

    3

    4

    5

    6

    7

    8

    <code class="python">>>> from itertools import chain

    >>> a = [1,2,3]

    >>> b = [4,5,6]

    >>> c = [7,8,9]

    >>> chain(a,b,c)

    <itertools.chain object at 0x7f2915465c10>

    >>> list(chain(a,b,c))

    [1, 2, 3, 4, 5, 6, 7, 8, 9]</code>

    對於你的 case 而言:

    1

    2

    <code class="python">from itertools import chain

    lst = list(chain(*self._i))</code>


    以下題外話。

    @松林 的方法是可行的,而且效能不會差,在 python 中 擴增(增強)運算一般運算 的行為不見得完全一模一樣,在這裡我們使用 + 來討論。

    我們看一個例子:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    <code class="python">>>> lst1 = [1,2,3]

    >>> lst2 = [4,5,6]

    >>> id(lst1)

    139814427362656

    >>> id(lst1 + lst2)

    139814427363088

    >>> lst1 += lst2

    >>> id(lst1)

    139814427362656</code>

    由本例可以發現,lst1 + lst2 會產生一個新的 list,但是 lst1 += lst2 則不會,因為對於擴增運算,Python 大部分 會依循以下規則:

    1. 不可變的型態會經由運算後產生一個新的 object,並且讓變數參考到該 object

    2. 可變的型態會採用 就地(in-place)運算 的方式來擴充或更新變數原本參考的 object

    也就是說 lst1 += lst2 等價於 lst1.extend(lst2)

    這取決於該型態是否有實作 __iadd__(或 __imul__ ...) 而不是只有實作 __add__ (或 __mul__ ...)

    對於沒有實作 __iXXX__ 的型態,Python 會改呼叫 __XXX__ 代替,這一定會運算出新的 object,但是 __iXXX__ 則會就地更新原 object

    也就是說 大部分 的:

    1. 不可變型態都不會實作 __iXXX__,因為更新不可變型態的 object 是沒有道理的

    2. 可變型態會實作 __iXXX__ 來就地更新

    為什麼我一直強調大部分呢?

    因為 CPython 中優化了 str 的擴增運算,str += other rrreee

    对于你的 case 而言:
    rrreee

    以下题外话。

    @松林的方法是可行的,而且效能不会差,在python 中🎜扩增(增强)运算🎜 和🎜一般运算🎜 的行为不见得完全一模一样,在这里我们使用+来讨论。 🎜 🎜我们看一个例子:🎜 rrreee 🎜由本例可以发现,lst1 + lst2 会产生一个新的list,但是lst1 += lst2 则不会,因为对于扩增运算,Python 🎜大部分🎜会依循以下规则:🎜
    1. 🎜不可变的型态会经由运算后产生一个新的 object,并且让变数参考到该 object🎜
    2. 🎜可变的型态会采用 🎜就地(in-place)运算🎜 的方式来扩充或更新变数原本参考的 object🎜
    🎜也就是说 lst1 += lst2 等价于 lst1.extend(lst2)🎜 🎜这取决于该型态是否有实作__iadd__(或__imul__ ...) 而不是只有实作__add__ (或__mul__ ...)🎜 🎜对于没有实作__iXXX__ 的型态,Python 会改呼叫__XXX__ 代替,这一定会运算出新的object,但是__iXXX__ 则会就地更新原object🎜 🎜也就是说 🎜大部分🎜 的:🎜
    1. 🎜不可变型态都不会实作 __iXXX__,因为更新不可变型态的 object 是没有道理的🎜
    2. 🎜可变型态会实作 __iXXX__ 来就地更新🎜
    🎜为什么我一直强调大部分呢?🎜 🎜因为CPython 中优化了str 的扩增运算,str += other 实在太常用了,在串接时,Python 并不会每次都复制字串🎜 🎜 🎜🎜我回答过的问题🎜: Python-QA🎜

    回复
    0
  • 高洛峰

    高洛峰2017-04-17 18:03:28

    使用extend函数,比如:

    1

    2

    3

    4

    5

    6

    7

    <code>>>> a=[1,2,3]

    >>> b=[4,5,6]

    >>> c=[7,8,9]

    >>> d=[]

    >>> d.extend([a,b,c])

    >>> d

    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]</code>

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 18:03:28

    使用相加会直观一点,不过性能会差一点

    1

    2

    3

    4

    <code>ret = []

    for x in self._i:

        ret += x

    print(x)</code>

    回复
    0
  • ringa_lee

    ringa_lee2017-04-17 18:03:28

    这样是不是更加Pythonic?

    1

    <code>myList = [x for j in self._i for x in j]</code>

    回复
    0
  • 取消回复