我有两个已经按需要排序的列表,我需要将它们放入一个文件中,如下例所示:
list1 = [a, b, c, d, e]
list2 = [1, 2, 3, 4, 5]
输出文件应如下所示:
a1
b2
c3
d4
e5
我对python来说相当新,所以我真的不确定如何进行文件编写。我使用with open(file, 'w') as f:
阅读是一种更好/更简单的方式来启动写入块,但我不确定如何合并列表并打印它们。我可以将它们合并到第三个列表中并使用print>>f, item
将其打印到文件中,但我想看看是否有更简单的方法。
谢谢!
延迟编辑:查看我的列表,它们不会总是相同的长度,但无论如何都需要打印所有数据。因此,如果list2转到7那么输出将需要是:
a1
b2
c3
d4
e5
6
7
反之亦然,其中list1可能比list2长。
答案 0 :(得分:6)
使用zip()功能组合(即压缩)两个列表。例如,
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = [1, 2, 3, 4, 5]
zip(list1, list2)
给出:
[('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]
然后您可以格式化输出以满足您的需求。
for i,j in zip(list1, list2):
print '%s%d' %(i,j)
得到以下特性:
a1
b2
c3
d4
e5
<强>更新强>:
如果您的列表长度不等,请使用此方法 itertools.izip_longest()可能适合您:
import itertools
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = [1, 2, 3]
for i,j in itertools.izip_longest(list1, list2):
if i: sys.stdout.write('%s' %i)
if j: sys.stdout.write('%d' %j)
sys.stdout.write('\n')
给出:
a1
b2
c3
d
e
注意,如果您使用的是Python 3,那么可以使用print()
函数。我在这里使用write()
来避免项目之间的额外空格。
答案 1 :(得分:2)
你应该使用zip
功能:
此函数返回元组列表,其中第i个元组包含来自每个参数序列或迭代的第i个元素。
for a, b in zip(lis1, list2):
write(a, b)
答案 2 :(得分:1)
>>> list1 = ['a', 'b', 'c', 'd', 'e']
>>> list2 = [1, 2, 3, 4, 5]
>>> map(lambda x:x[0]+str(x[1]),zip(list1,list2))
['a1', 'b2', 'c3', 'd4', 'e5']
没有zip()
:
>>> map(lambda x,y:x+str(y), list1,list2)
['a1', 'b2', 'c3', 'd4', 'e5']
编辑: If the list2 is list2 = [1, 2, 3, 4, 5,6,7]
然后使用izip_longest
>>> from itertools import zip_longest
>>> [y[0]+str(y[1]) if y[0]!=None else y[1] for y in izip_longest(list1,list2,fillvalue=None)]
['a1', 'b2', 'c3', 'd4', 'e5', 6, 7]
答案 3 :(得分:0)
一个班轮:
print "\n".join(("%s%s" % t for t in zip(list1, list2)))
答案 4 :(得分:0)
简单......爱你的Python :)。
>>> from itertools import *
>>> L1 = list("abcde")
>>> L2 = range(1,8)
>>> [(x if x != None else '') + str(y) for (x,y) in izip_longest(L1,L2)]
['a1', 'b2', 'c3', 'd4', 'e5', '6', '7']
>>> print '\n'.join([(x if x != None else '') + str(y) for (x,y) in izip_longest(L1,L2)])
a1
b2
c3
d4
e5
6
7