6
votes

Manière pythononique de modifier tous les éléments dans une liste et de sauvegarder la liste sur le fichier .txt

J'ai une liste de chaînes.

['a0', 'b0', 'c0', 'a1', 'b1', 'c1', 'a2', 'b2', 'c2', 'a3', 'b3', 'c3']


1 commentaires

Les répondeurs notent que l'OP a demandé une solution «plus pythonique», pas plus courte ou plus complexe.


4 Réponses :


7
votes

Au lieu de votre dernière ligne, utilisez:

the_list = ['a', 'b', 'c']

with open('myFile.txt', 'w') as f:
    for num in range(4):
        for letter in the_list:
            f.write("%s%s\n" % (letter, num))


7 commentaires

Nice .. et faveur xrange sur plage en général (bien que avec de tels nombres, il ne devrait pas vraiment importer)


Il est préférable d'utiliser dans les réponses sur ce site car il est compatible avec Python 3.


@jamylak pouvez-vous dire que je code toujours avec 2,6 / 7 .. Merci de le remarquer.


Je ne comprends pas. Je veux dire qu'il est préférable que les personnes visionnent la réponse qui peut utiliser Python 2.x ou Python 3.x de sorte que cela fonctionnera pour eux de toute façon.


@jamylak je n'étais pas en désaccord avec toi


@jamylak Yup, je offrais une explication de mon commentaire original et que vous vous remerciions pour votre commentaire. C'est parfait.


Merci beaucoup: D Ceci semble être juste ce que j'étais après. Doit te souvenir % !



2
votes

Cela ferait probablement votre travail xxx


1 commentaires

Merci, je suis inconnu avec itertools



2
votes

Si vous souhaitez compresser votre code un peu vous pouvez faire:

>>> n = 4
>>> the_list = ['a', 'b', 'c']
>>> new_list = [x+str(y) for x in the_list for y in range(n)]
>>> with open('myFile.txt', 'w') as f:
...     f.write("\n".join(new_list))


5 commentaires

Je pense que c'est en fait moins pythonic que la solution de l'OP: 1) Il utilise mappe et lambda , qui ne sont pas aussi python que les compréhensions de la liste ou droite list.append , 2) carte + lambda + itTools est plus complexe et probablement plus lent que la solution de bison, ce qui le rend moins zen de python-ish, 3) il n'utilise pas le < Code> avec la relève , le fichier peut donc ne pas être fermé (bien que dans CPPHON IL EST), 4) Il est préférable de compresser votre code à l'aide de GZIP. :-)


Je ne pense pas que cela très lisible (simple est meilleur que complexe) bien que à un niveau assez cool de transmet tout cela dans ce code court.


Je sais, puisque j'ai regardé l'apprentissage Haskell, mon code devient Ulglier et Laglier. Urgh.


Je ne savais pas que vous pourriez avoir pour boucle sur une ligne comme ça, c'est assez compressé!


Bien que, pour la sortie, je suis après avoir dû inverser l'ordre du pour boucles :)



1
votes

Ce que vous faites, c'est bien - l'un des points du zen de Python est "simple vaut mieux que complexe". Vous pouvez facilement réécrire ceci comme une doublure (éventuellement à l'aide d'une compréhension de la liste imbriquée), mais ce que vous avez bien convaincu et facile à comprendre.

Mais il y a quelques changements mineurs que je pourrais faire:

  • Il est souvent préférable d'utiliser une série plus portable dans votre fichier texte, comme JSON, via Python's JSON.DUMP (NewList, F) . Bon pour utiliser le avec instruction, cependant.
  • Vous n'avez pas besoin d'un StringNum distinct - STR (num) à l'intérieur de l'annexe est tout aussi bon
  • Suivez Conventions de nommage PEP-8 , donc new_list < / code> au lieu de nouvelleliste
  • Nitpicking: Votre titre de question dit "Modifier tous les éléments dans une liste", lorsqu'il est en réalité, votre code construit une nouvelle liste. Habituellement, c'est la chose pythonique à faire de toute façon - des effets secondaires comme la modification de la liste en place sont souvent moins utiles.

1 commentaires

Regarda Json et lisez les conventions PPE-8. À l'intérieur de l'APPEND- Merci (tout à fait évident maintenant, je le vois: D) Vous avez raison, j'ai défini l'intention de modifier la liste, mais dans mon code, j'ai créé un nouveau. Cela semble être une meilleure idée aussi. Merci