0

我有两个列表已经按需要排序,我需要将它们放入一个文件中,如下例所示:

list1 = [a, b, c, d, e]
list2 = [1, 2, 3, 4, 5]

输出文件应如下所示:

a1
b2
c3
d4
e5

我对python相当陌生,所以我不太确定如何进行文件写入。我阅读 usingwith open(file, 'w') as f:是一种更好/更简单的方式来启动写入块,但我不确定如何合并列表并打印它们。我可能可以将它们合并到第三个列表中,然后将其打印到文件中,print>>f, item但我想看看是否有更简单的方法。

谢谢!

后期编辑:查看我的列表,它们的长度并不总是相同,但无论如何都需要打印所有数据。因此,如果 list2 变为 7,那么输出将需要是:

a1
b2
c3
d4
e5
6
7

反之亦然,其中 list1 可能比 list2 长。

4

5 回答 5

7

使用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()这里使用是为了避免项目之间出现额外的空格。

于 2012-07-10T17:21:51.817 回答
2

你应该使用zip功能:

此函数返回一个元组列表,其中第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。

for a, b in zip(lis1, list2):
write(a, b)
于 2012-07-10T17:22:37.683 回答
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]
于 2012-07-10T17:28:27.683 回答
0

一个班轮:

print "\n".join(("%s%s" % t for t in zip(list1, list2)))
于 2012-07-10T17:25:09.617 回答
0

Simples ...爱你的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
于 2012-07-10T17:42:31.223 回答