0

次の例のように、必要な方法で既にソートされている2つのリストがあり、それらを1つのファイルに入れる必要があります。

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

出力ファイルは次のようになります。

a1
b2
c3
d4
e5

私はPythonにかなり慣れていないので、ファイルの書き込み方法がはっきりしているわけではありません。私が読んだwith open(file, 'w') as f:のは、書き込みブロックを開始するためのより良い/簡単な方法ですが、リストをマージしてそのように印刷する方法がわかりません。おそらくそれらを3番目のリストにマージし、それを使用してファイルに出力することもできますprint>>f, itemが、もっと簡単な方法があるかどうかを確認したいと思いました。

ありがとうございました!

後期編集:私のリストを見ると、それらは常に同じ長さであるとは限りませんが、すべてのデータは関係なく印刷する必要があります。したがって、list2が7になった場合、出力は次のようになります。

a1
b2
c3
d4
e5
6
7

またはその逆の場合、list1はlist2より長くなる可能性があります。

4

5 に答える 5

7

zip()関数を使用して、2 つのリストを結合 (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 番目のタプルには、各引数シーケンスまたは iterable の 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

シンプル...あなたの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 に答える