Maison > Questions et réponses > le corps du texte
新手勿喷
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 出来是空白
大家讲道理2017-04-17 18:03:28
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 :
Le type immuable générera un nouvel objet après l'opération, et laissera les variables se référer à l'objet
Les types de variables utiliseront des opérations sur place pour développer ou mettre à jour l'objet
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
C'est-à-dire La plupart des :
Les types immuables ne seront pas implémentés __iXXX__
car cela n'a aucun sens de mettre à jour un objet immuable
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
高洛峰2017-04-17 18:03:28
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]]
PHP中文网2017-04-17 18:03:28
L'utilisation de l'addition sera plus intuitive, mais les performances seront moins bonnes
ret = []
for x in self._i:
ret += x
print(x)
ringa_lee2017-04-17 18:03:28
Est-ce plus pythonique ?
myList = [x for j in self._i for x in j]