打印从名单在Python
我试图打印到文件,这将是这样的:打印从名单在Python
'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()
首先,不要使用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()
谢谢,我喜欢这个解决方案..以下还有一些很好的替代方案......但我喜欢这种冗长,因为我倾向于忘记随着时间的流逝我是如何做的... – cit 2010-02-08 15:27:59
你的代码可能是简单了很多:
for list in listoflists:
f.write(str(list))
f.write('\n')
但是,这会打印出类似这样['1']
。看起来你想要更类似的东西:
for list in listoflists:
f.write(str(list[0]))
f.write('\n')
此外,为什么你有一堆单元素列表?你不能把所有的元素放到一个列表中吗?
我认为要解决这仅仅是一个基本的嵌套循环的最佳方式。试试这个:
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
包括出的报价是有点古怪,但如果你坚持:
for entry in listoflists:
print >>f, repr(entry[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))
原因很简单,为什么你得到了错误的文件内容,是因为你在呼唤iter
两次。第15-16行是:
itr.next()
s = str(itr.next())
对于更Python印刷语义,看到其他的答案
人的内心名单总是只包含一个项目?没有更多,永远不会更少? – Mizipzor 2010-02-08 14:53:41
内部列表总是一个项目... – cit 2010-02-08 15:10:57
哇。你完全绕过了迭代器的全部目的。这只是虐待。迭代器专门设计用于for循环。而且,列表已经是迭代器,所以不需要从'listoflists'创建一个新的迭代器。 – jcdyer 2010-02-08 15:28:33