我有三个列表A,B和C.我想将列表的内容写入文件,如下所示: A [1] B [1] C [1]
A [2] B [2] C [2] 。 。
答案 0 :(得分:3)
看一下使用zip
。使用zip
,您将获得元组列表,元组是每个列表的第i项。作为奖励,元组列表被截断为三个中最短的列表:
myComboList = zip(A, B, C)
然后你总是可以按照你喜欢的顺序写东西,而不用担心一个列表可能比其他列表更短/更长。
答案 1 :(得分:2)
我假设所有列表的长度都相同,
assert len(A) == len(B) == len(C)
for a, b, c in zip(A, B, C):
print a, b, c # replace with file write
答案 2 :(得分:1)
如果您的列表很长,itertools.izip()可能会成为您的朋友。文件对象.writelines()可以使用列表,也可以在两者之间插入yield构造来进行格式化。
def format(seq):
for l in seq:
yield "%s %s %s" % l
f.writelines(format(itertools.izip(A, B, C)))
答案 3 :(得分:1)
从 Bittrance 中了解itertools.izip()
,
加上内置函数format()
已经存在的事实:
import itertools
A = ['arez','hgjkhg','jhdfg','uhireug']
B = ['aaa','bbb','cccc','ddd']
C = ['XXXX','YYYY','ZZZZ','WWWWW']
with open('zorgl.txt','w') as f:
f.writelines("[{0}] [{1}] [{2}]\n".format(*tu)
for tu in itertools.izip(A, B, C))
导致文件
[arez] [aaa] [XXXX]
[hgjkhg] [bbb] [YYYY]
[jhdfg] [cccc] [ZZZZ]
[uhireug] [ddd] [WWWWW]
一个启示发生在我身上:
我从未意识到writelines()
写了一串字符串,可以是可迭代的,而write()
只写一个字符串
直到现在我才做这样的事情:
f.write('\n'.join(sequentia))
写入文件。
但是'\n'.join(sequentia)
是在一次写入之前创建的对象。我相信。
相比之下,writelines()
可以接收迭代,然后一行一行地完成行的写入。这允许在文件中逐步写入大量数据,而一次只能在一个块中写入总数据量。
我是对的吗?
writelines()
唯一的缺点就是它会按原样写出字符串,而不添加换行符。
因此writelines(sequentz)
与write(''.join(sequentz))
的写法相同。只有write('\n'.join(sequentz))
在元素之间添加换行符