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

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

4

4 回答 4

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))
于 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 之禅的要点之一是“简单胜于复杂”。您可以轻松地将其重写为单行(可能使用嵌套列表理解),但是您所拥有的很好且易于理解。

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

  • 通常最好通过 Python 的json.dump(newList, f). 不过,很适合使用该with语句。
  • 你不需要一个单独的stringNum变量——str(num)在 append 里面也一样好
  • 遵循PEP-8命名约定,new_list而不是newList
  • 吹毛求疵:您的问题标题说“修改列表中的所有项目”,而实际上您的代码正在构建一个新列表。通常这是 Pythonic 的事情——就地修改列表等副作用通常不太有用。
于 2012-04-16T17:21:52.353 回答