python 列表问题 ?
大家讲道理
大家讲道理 2017-04-17 18:01:28
0
4
389

新手勿喷

for i in  open (v):
    _temp = i.split('-')
    self._i= gen.gen(_temp[0], _temp[1])

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


cc = []
for i in  open (v):
    _temp = i.split('-')
    self= gen.gen(_temp[0], _temp[1])
    for bbc in  self:
        cc.append(i)

这样解决的 !!!

怎样把结果赋值给 self._i

 self._i = cc
    print 出来是空白 
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(4)
大家讲道理

Jika anda ingin menggabungkan berbilang senarai menjadi satu, sebaiknya gunakan itertools.chain untuk menggabungkannya Berikut ialah contoh mudah:

>>> 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]

Untuk kes anda:

from itertools import chain
lst = list(chain(*self._i))

Penyimpangan berikut.

Kaedah

@松林 boleh dilaksanakan, dan prestasinya tidak buruk dalam python, kelakuan operasi penguatan (dipertingkat) dan operasi am tidak semestinya sama, di sini Kami menggunakan untuk berbincang.

Mari kita lihat contoh:

>>> lst1 = [1,2,3]
>>> lst2 = [4,5,6]
>>> id(lst1)
139814427362656
>>> id(lst1 + lst2)
139814427363088
>>> lst1 += lst2
>>> id(lst1)
139814427362656

Daripada contoh ini, kita dapati bahawa lst1 lst2 akan menjana senarai baharu, tetapi lst1 = lst2 tidak akan, kerana untuk operasi pengembangan, Python kebanyakan akan mengikut peraturan berikut:

  1. Jenis tidak berubah akan menghasilkan objek baharu selepas operasi dan biarkan pembolehubah merujuk kepada objek

  2. Jenis pembolehubah akan menggunakan operasi di tempat untuk mengembangkan atau mengemas kini objek

  3. yang dirujuk pada asalnya pembolehubah.

Dalam erti kata lain, lst1 = lst2 bersamaan dengan lst1.extend(lst2)

Ini bergantung pada sama ada jenis mempunyai pelaksanaan __iadd__(atau __imul__ ...) dan bukannya hanya melaksanakan __add__ (atau __mul__ ...)

Untuk jenis yang tidak melaksanakan __iXXX__, Python akan memanggil __XXX__ sebaliknya, yang pasti akan mengira objek baharu, tetapi __iXXX__ akan mengemas kini objek asal

di tempatnya.

Maksudnya Kebanyakan :

  1. Jenis tidak berubah tidak akan dilaksanakan __iXXX__ kerana tidak masuk akal untuk mengemas kini objek tidak berubah

  2. Jenis boleh ubah akan dilaksanakan __iXXX__ untuk mengemas kini di tempat

Mengapa saya terus menekankan kebanyakannya?

Oleh kerana operasi penguatan str dioptimumkan dalam CPython, str = other terlalu biasa digunakan apabila menggabungkan, Python tidak akan menyalin rentetan setiap kali


Soalan yang saya jawab: Python-QA

小葫芦

Gunakan fungsi lanjutan, seperti:

>>> 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]]
洪涛

Menggunakan penambahan akan menjadi lebih intuitif, tetapi prestasi akan menjadi lebih teruk

ret = []
for x in self._i:
    ret += x
print(x)
左手右手慢动作

Adakah ini lebih Pythonic?

myList = [x for j in self._i for x in j]
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan