我正在尝试打印到一个看起来像这样的文件:
'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()
答案 0 :(得分:7)
首先,不要使用iter
和next()
,这就是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))