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

新手勿喷

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 出来是空白 
大家讲道理
大家讲道理

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

répondre à tous(4)
大家讲道理

Si vous souhaitez fusionner plusieurs listes en une seule, il est préférable d'utiliser itertools.chain pour les concaténer. Ce qui suit est un exemple simple :

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

Pour votre cas :

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

La digression suivante.

La méthode de @松林 est réalisable, et les performances ne sont pas mauvaises. En python, le comportement de l'opération d'amplification (améliorée) et du opération générale ne sont pas forcément exactement les mêmes, ici, nous utilisons pour discuter.

Regardons un exemple :

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

À partir de cet exemple, nous pouvons constater que lst1 lst2 générera une nouvelle liste, mais lst1 = lst2 ne le fera pas, car pour l'opération d'expansion, Python la plupart des suivront les règles suivantes :

  1. Le type immuable générera un nouvel objet après l'opération, et laissera les variables se référer à l'objet

  2. Les types de variables utiliseront des opérations sur place pour développer ou mettre à jour l'objet

  3. auquel la variable fait référence à l'origine.

En d'autres termes, lst1 = lst2 équivaut à lst1.extend(lst2)

Cela dépend si le type a une implémentation __iadd__(ou __imul__ ...) au lieu de seulement implémenter __add__ (ou __mul__ ...)

Pour les types qui n'implémentent pas __iXXX__, Python appellera __XXX__ à la place, ce qui calculera certainement un nouvel objet, mais __iXXX__ mettra à jour l'objet d'origine

en place.

C'est-à-dire La plupart des  :

  1. Les types immuables ne seront pas implémentés __iXXX__ car cela n'a aucun sens de mettre à jour un objet immuable

  2. Les types mutables seront implémentés __iXXX__ pour être mis à jour sur place

Pourquoi est-ce que je continue à insister sur la majeure partie ?

Étant donné que l'opération d'amplification de str est optimisée dans CPython, str = other est trop couramment utilisée lors de la concaténation, Python ne copiera pas la chaîne à chaque fois

.

Questions auxquelles j'ai répondu : Python-QA

小葫芦

Utilisez la fonction d'extension, telle que :

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

L'utilisation de l'addition sera plus intuitive, mais les performances seront moins bonnes

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

Est-ce plus pythonique ?

myList = [x for j in self._i for x in j]
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal