recherche

Maison  >  Questions et réponses  >  le corps du texte

python 列表问题 ?

新手勿喷

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 出来是空白 
大家讲道理大家讲道理2893 Il y a quelques jours400

répondre à tous(4)je répondrai

  • 大家讲道理

    大家讲道理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 :

    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

    répondre
    0
  • 高洛峰

    高洛峰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]]

    répondre
    0
  • PHP中文网

    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)

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-17 18:03:28

    Est-ce plus pythonique ?

    myList = [x for j in self._i for x in j]

    répondre
    0
  • Annulerrépondre