从Python中的列表列表打印到文件

时间:2010-02-08 14:26:43

标签: python file list iteration

我正在尝试打印到一个看起来像这样的文件:

'A'
'1'
'B'
'2'
'C'
'3' 

但是,鉴于下面的代码,结果是:

['A']
['B']
['C']

这可能是一个“垒球”问题,但我在这里做错了什么?

l1 = ['1']
l2 = ['A']
l3 = ['2']
l4 = ['B']
l5 = ['3']
l6 = ['C']

listoflists = [l1,l2,l3,l4,l5,l6]
itr = iter(listoflists)

f = open ('order.txt','w')

while True: 
    try:
           itr.next()
           s = str(itr.next())
           f.write(str('\n'))
           f.write(s)

    except StopIteration:
        break
f.close()

6 个答案:

答案 0 :(得分:7)

首先,不要使用iternext(),这就是for的用途。其次,您实际上是在列表中写入一个列表,而不是其内容。因此,您可以打印列表的第一个元素(即l1[0])或遍历所有内部列表元素。

您的代码应如下所示:

l1 = ['1']
l2 = ['A']
l3 = ['2']
l4 = ['B']
l5 = ['3']
l6 = ['C']

listoflists = [l1,l2,l3,l4,l5,l6]

f = open ('order.txt','w')

for inner_list in listoflists:
    for element in inner_list:
        f.write(element+'\n')

f.close()

答案 1 :(得分:2)

我认为解决这个问题的最佳方法就是使用基本的嵌套循环。试试这个:

l1 = ['1']
l2 = ['A']
l3 = ['2']
l4 = ['B']
l5 = ['3']
l6 = ['C']
listoflists = [l1,l2,l3,l4,l5,l6]

f = open("out.txt","w")

# for each list and
# for each item in the list;
# write the item to the file, separated by a comma
for list in listoflists: 
    for item in list: 
        f.write(item+",") 

f.close()

Out.txt现在成立:

1,A,2,B,3,C,

哦,如果没有单行解决方案,也没有Python问题是完整的(这也会删除我初始响应中的尾随逗号)。

open("out.txt","w").write(",".join(("".join(i) for i in listoflists)))

Out.txt现在成立:

1,A,2,B,3,C

答案 2 :(得分:1)

您的代码可能更简单:

for list in listoflists:
    f.write(str(list))
    f.write('\n')

但是,这将打印类似['1']的内容。看起来你想要更像的东西:

for list in listoflists:
    f.write(str(list[0]))
    f.write('\n')

另外,为什么你有一堆单元素列表?你不能把所有元素都放在一个列表中吗?

答案 3 :(得分:1)

您获取错误文件内容的简单原因是因为您正在调用iter两次。第15-16行是:

itr.next()
s = str(itr.next())

有关更多Pythonic打印语义,请参阅其他答案

答案 4 :(得分:0)

在输出中包含引号有点奇怪,但如果你坚持:

for entry in listoflists:
  print >>f, repr(entry[0])

如果内部列表不只有一个元素,则不指定会发生什么,因此此处忽略任何其他可能性。

答案 5 :(得分:0)

您可以使用itertools.chain(记录为here)简单地遍历所有列表元素:

import itertools

l1 = ['1']
l2 = ['A']
l3 = ['2']
l4 = ['B']
l5 = ['3']
l6 = ['C']

chainedlists = itertools.chain(l1,l2,l3,l4,l5,l6)

with open ('order.txt','wt') as f:
    for element in chainedlists:
        # Change this how you want it to be formatted, it will output
        # a string "a" as 'a' (with the quotes)
        f.write("%s\n" % repr(element))