Pythonic方法修改列表中的所有项目,并将列表保存到.txt文件

时间:2012-04-16 17:12:45

标签: python file list

我有一个字符串列表。

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

非常欢迎有关更多pythonic方法实现我的目标的任何提示,

4 个答案:

答案 0 :(得分:7)

使用:

代替最后一行
f.write("\n".join(newList))

这将把newList中的字符串写成f,用换行符分隔。请注意,如果您实际上不需要newList,则可以组合两个循环并随时编写字符串:

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))

答案 1 :(得分: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))

答案 2 :(得分: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))

答案 3 :(得分:1)

你正在做的事情很好 - Zen of Python中的一点是“简单比复杂更好”。您可以轻松地将其重写为单行(可能使用嵌套列表理解),但您所拥有的内容很好且易于理解。

但是我可能会做一些小改动:

  • 通常最好通过Python的json.dump(newList, f)在文本文件中使用更便携的序列化,例如JSON。但是,使用with语句很有用。
  • 您不需要单独的stringNum变量 - 附加内的str(num)也一样好
  • 遵循PEP-8命名约定,因此new_list代替newList
  • 挑剔:您的问题标题是“修改列表中的所有项目”,实际上您的代码正在构建新列表。通常这是Pythonic要做的事情 - 像在原地修改列表这样的副作用通常不太有用。