6

文字列のリストがあります。

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

文字列に整数を追加したいので、次のような出力になります。

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

これを次の形式で.txtファイルに保存したいと思います。

a0
b0
c0
a1
b1
c1
a2
b2
c2
a3
b3
c3

試み:

theList = ['a', 'b', 'c']
newList = []

for num in range(4):
    stringNum = str(num)
    for letter in theList:
        newList.append(entry+stringNum)

with open('myFile.txt', 'w') as f:
    print>>f, newList

現在、ファイルmyFile.txtに保存できますが、ファイル内のテキストは次のようになります。

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

私の目標を達成するためのよりPython的な方法に関するヒントは大歓迎です。

4

4 に答える 4

7

最後の行の代わりに、次を使用します。

f.write("\n".join(newList))

これにより、改行で区切られたnewList内の文字列がfに書き込まれます。実際にnewListが必要ない場合は、2つのループを組み合わせて、次のように文字列を書き込むことができます。

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))
于 2012-04-16T17:15:13.960 に答える
2

これはおそらくあなたの仕事をするでしょう

with open('myFile.txt', 'w') as f:
    for row in itertools.product(range(len(theList)+1),theList):
        f.write("{1}{0}\n".format(*row))
于 2012-04-16T17:21:19.633 に答える
2

コードを少し圧縮したい場合は、次のことができます。

>>> 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))
于 2012-04-16T17:21:39.353 に答える
1

あなたがしていることは問題ありません-PythonのZenのポイントの1つは、 「複雑よりも単純な方が優れている」ということです。これをワンライナーとして簡単に書き直すことができますが(ネストされたリスト内包表記を使用する可能性があります)、持っているものは問題なく理解しやすいものです。

しかし、私が行うかもしれないいくつかの小さな変更があります:

  • 多くの場合、Pythonを介して、JSONなどのテキストファイルでより移植性の高いシリアル化を使用することをお勧めしますjson.dump(newList, f)withただし、ステートメントを使用するのは良いことです。
  • stringNum個別の変数は必要ありません-str(num)追加内も同様に優れています
  • PEP-8の命名規則に従うので、new_list代わりにnewList
  • ニッチピッキング:実際にはコードが新しいリストを作成しているのに、質問のタイトルには「リスト内のすべてのアイテムを変更する」と書かれています。通常、これはとにかくPythonで行うことです。リストをインプレースで変更するなどの副作用は、あまり役に立たないことがよくあります。
于 2012-04-16T17:21:52.353 に答える